
|
|
|
| |
(define id exp) |
(define pi 3.14) |
(lambda ( id...) exp )
|
((lambda (x) (* x x)) 3) is 9 ((lambda (x y) (+ x y)) 3 4) is 7 |
(define square (lambda (x) (* x x))) |
1 ]=> (square 3) ;Value: 9 |
(define fac
(lambda (n)
(if (= n 0)
1
(* n (fac (- n 1))))))
(define fib
(lambda (n)
(if (= n 0)
0
(if (= n 1)
1
(+ (fib (- n 1)) (fib (- n 2)))))))
(define ack
(lambda (m n)
(if (= m 0)
(+ n 1)
(if (= n 0)
(ack (- m 1) 1)
(ack (- m 1) (ack m (- n 1)))))))
(define gcd
(lambda (a b)
(if (= a b)
a
(if (> a b)
(gcd (- a b) b)
(gcd a (- b a))))))
|
(define sum
(lambda (l)
(if (null? l)
0
(+ (car l) (sum (cdr l))))))
(define product
(lambda (l)
(if (null? l)
1
(* (car l) (sum (cdr l))))))
(define length
(lambda (l)
(if (null? l)
0
(+ 1 (length (cdr l))))))
(define reverse
(lambda (l)
(if (null? l)
nil
(append (reverse (cdr l)) (list (car l))))))
|
E ::= (lambda (I...) E... ) | (let Bo Eo) | (let* B1 E1) | (letrec B2 E2) |... B ::= ((I E)...) |
(define isort (lambda (l)
(letrec
((insert (lambda (x l)
(if (null? l)
(list x)
(if (<= x (car l))
(cons x l)
(cons (car l) (insert x (cdr l)))))))))
(if (null? l)
nil
(insert (car l) (isort (cdr l))))))
|
; this binds x to 5 and yields 10 (let ((x 5)) (* x 2)) ; this bind x to 10, z to 5 and yields 50. (let ((x 10) (z 5)) (* x z)) |
(let ((a 3) (b 4)
(let ((double (* 2 a)) (triple (* 3 b))) (+ double triple))))
|