DOC PREVIEW
UA CSC 520 - Scheme - Conditional Expressions

This preview shows page 1-2-3 out of 8 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 8 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

CSc 520 — Principles of Programming Languages36 : Scheme — Conditional ExpressionsChristian CollbergDepartment of Computer ScienceUniversity of [email protected] 2008 Christian CollbergMay 2, 20081 Comparison Functions• Boolean functions (by convention) end with a ?.• We can discriminate between different kinds of numbers:> (complex? 3+4i)#t> (complex? 3)#t> (real? 3)#t> (real? -2.5+0.0i)#t> (rational? 6/10)2 Comparison Functions. . .#t> (rational? 6/3)#t> (integer? 3+0i)#t> (integer? 3.0)#t> (integer? 8/4)#t3 Tests on Numbers• Several of the comparison functions can take multiple arguments.• (< 4 5 6 7 9 234) returns true since the numbers are monotonically increasing.1> (< 4 5)true> (< 4 5 6 7 9 234)true> (> 5 2 1 3)false> (= 1 1 1 1 1)true> (<= 1 2 2 2 3)true4 Tests on Numbers. . .> (>= 5 5)true> (zero? 5)false> (positive? 5)true> (negative? 5)false> (odd? 5)true> (even? 5)false5 Conditionals — If• If the test-expression evaluates to #f (False) return the valuen of the then-expression, otherwisereturn the value of the else-expression:(if test-expressionthen-expressionelse-expression)• Up to language level “Advanced Student” if-expressions must have two parts.• Set the language level to Standard (R5RS) to get the standard Scheme behavior, where the else-expression is optional.26 Conditionals — If. . .> (define x 5)> (if (= x 5) 2 4)2> (if (< x 3)(display "hello")(display "bye"))bye> (display(if (< x 3) "hello" "bye"))bye7 If it’s not False (#f), it’s True (#t)• Any value that is not false, is interpreted as true.• NOTE: In DrScheme this depends on which language level you set. Up to “Advanced Student”, thetest-expression of an if must be either #t or #f.• Set the language level to Standard (R5RS) to get the standard Scheme behavior:> (if 5 "hello" "bye")"hello"> (if #f "hello" "bye")"bye"> (if #f "hello")> (if #t "hello")"hello"8 Boolean Operators• and and or can take multiple arguments.• and returns true if none of its arguments evaluate to False.• or returns true if any of its arguments evaluates to True.> (and (< 3 5) (odd? 5) (inexact? (cos 32)))#t> (or (even? 5) (zero? (- 5 5)))#t> (not 5)#f> (not #t)#f9 Boolean Operators. . .• In general, any value that is not #f is considered true.• and and or evaluate their arguments from left to right, and stop as soon as they know the final result.3• The last value evaluated is the one returned.> (and "hello")"hello"> (and "hello" "world")"world"> (or "hello" "world")"hello"10 Defining Boolean Functions• We can define our own boolean functions:(define (big-number? n)(> n 10000000))> (big-number? 5)#f> (big-number? 384783274832748327)#t >11 Conditionals — cond• cond is a generalization of if:(cond(cond-expression1result-expression1)(cond-expression2result-expression2)...(else else-expression))• Each cond-expressioniis evaluated in turn, until one evaluates to not False.> (cond((< 2 3) 4)((= 2 3) 5)(else 6))412 Conditionals — cond. . .• To make this a bit more readable, we use square brackets around the cond-clauses:(cond[cond-expr1result-expr1][cond-expr2result-expr2]...[else else-expression])4> (cond [#f 5] [#t 6])6> (cond[(= 4 5) "hello"][(> 4 5) "goodbye"][(< 4 5) "see ya!"])"see ya!"13 Conditionals — case• case is like Java/C’s switch statment:(case key[(expr1expr2...) result-expr1][(expr11expr11...) result-expr2]...(else else-expr))• The key is evaluated once, and compared against each cond-expr in turn, and the corresponding result-expr is returned.> (case 5 [(2 3) "hello"] [(4 5) "bye"])"bye"14 Conditionals — case. . .(define (classify n)(case n[(2 4 8 16 32) "small power of 2"][(2 3 5 7 11) "small prime number"][else "some other number"]))> (classify 4)"small power of 2"> (classify 3)"small prime number"> (classify 2)"small power of 2"> (classify 32476)"some other number"15 Sequencing• To do more than one thing in sequence, use begin:(begin arg1arg2...)5> (begin(display "the meaning of life=")(display (* 6 7))(newline))the meaning of life=4216 Examples — !n• Write the factorial function !n:(define (! n)(cond[(zero? n) 1][else (* n (! (- n 1)))]))> (! 5)12017 Examples —nr• Write thenrfunction in Scheme:nr=n!r! ∗ (n − r)!• Use the factorial function from the last slide.(define (choose n r)(/ (! n) (* (! r) (! (- n r)))))> (choose 5 2)1018 Examples — (sum m n)• Write a function (sum m n) that returns the sum of the integers between m and n, inclusive.(define (sum m n)(cond[(= m n) m][else (+ m (sum (+ 1 m) n))]))> (sum 1 2)3> (sum 1 4)10619 Examples — Ackermann’s function• Implement Ackermann’s function:A(1, j) = 2j for j ≥ 1A(i, 1) = A(i − 1, 2) for i ≥ 2A(i, j) = A(i − 1, A(i, j − 1)) for i, j ≥ 2(define (A i j)(cond[(and (= i 1) (>= j 1)) (* 2 j)][(and (>= i 2) (= j 1)) (A (- i 1) 2)][(and (>= i 2) (>= j 2))(A (- i 1) (A i (- j 1)))]))20 Examples — Ackermann’s function. . .• Ackermann’s function grows very quickly:> (A 1 1)2> (A 3 2)512> (A 3 3)1561585988519419914804999641169225495873164118478675544712288744352806014709395360374859633380685538006371637297210170750776562389313989286729801216819221 Scheme so Far• Unlike languages like Java and C which are statically typed (we describe in the program text what typeeach variable is) Scheme is dynamically typed. We can test at runtime what particular type of numberan atom is:– (complex? arg), (real? arg)– (rational? arg), (integer? arg)• Tests on numbers:– (< arg1, arg2), (> arg1, arg2)– (= arg1, arg2), (<= arg1, arg2)– (>= arg1, arg2), (zero? arg)– (positive? arg), (negative? arg)– (odd? arg), (even? arg)722 Scheme so Far. . .• Unlike many other languages like Java which are statement-oriented, Scheme is expression-oriented.That is, every construct (even if, cond, etc) return a value. The if-expression returns the value ofthe then-expr or the else-expr:(if test-exprthen-expr else-expr)depending on the value of the test-expr.23 Scheme so Far. . .• The cond-expression evaluates its guards until one evaluates to non-false. The corresponding value isreturned:(cond(guard1value1)(guard2value2)...(else else-expr))24 Scheme so Far. . .• The case-expression evaluates key, finds the first matching expression, and returns the correspondingresult:(case key[(expr1expr2...) result-expr1][(expr11expr11...) result-expr2]...(else else-expr))25 Scheme so Far. . .• and and or take multiple arguments, evaluate


View Full Document

UA CSC 520 - Scheme - Conditional Expressions

Documents in this Course
Handout

Handout

13 pages

Semantics

Semantics

15 pages

Haskell

Haskell

15 pages

Recursion

Recursion

18 pages

Semantics

Semantics

12 pages

Scheme

Scheme

32 pages

Syllabus

Syllabus

40 pages

Haskell

Haskell

17 pages

Scheme

Scheme

27 pages

Scheme

Scheme

9 pages

TypeS

TypeS

13 pages

Scheme

Scheme

27 pages

Syllabus

Syllabus

10 pages

Types

Types

16 pages

FORTRAN

FORTRAN

10 pages

Load more
Download Scheme - Conditional Expressions
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Scheme - Conditional Expressions and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Scheme - Conditional Expressions 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?