diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/variables.bdl | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/variables.bdl b/examples/variables.bdl index 6097368..2e2543a 100644 --- a/examples/variables.bdl +++ b/examples/variables.bdl | |||
@@ -14,3 +14,59 @@ | |||
14 | (print "(error? (set! a 42)) -> ") (error? (set! a 42)) | 14 | (print "(error? (set! a 42)) -> ") (error? (set! a 42)) |
15 | (print "a -> ") a | 15 | (print "a -> ") a |
16 | (print "(error? (set! b 99)) -> ") (error? (set! b 99)) | 16 | (print "(error? (set! b 99)) -> ") (error? (set! b 99)) |
17 | (lambda (a b) (+ 10 a b)) | ||
18 | |||
19 | (def a 20) | ||
20 | ((lambda (a b) (+ 10 a b)) 1 2) | ||
21 | ((lambda (a b) (+ 10 a b)) a 3) | ||
22 | (def myfun (lambda (a b) (+ a b))) | ||
23 | (myfun 6 9) | ||
24 | (+ 1 (myfun 10 (myfun a a)) 30) | ||
25 | (myfun 10 (myfun 5 0)) | ||
26 | |||
27 | ;; Closures. | ||
28 | (def make-counter (lambda () | ||
29 | (def value 0) | ||
30 | (def counter (lambda () | ||
31 | (set! value (+ value 1)) | ||
32 | value)) | ||
33 | counter)) | ||
34 | |||
35 | (def counter-a (make-counter)) | ||
36 | (def counter-b (make-counter)) | ||
37 | (counter-a) | ||
38 | (counter-a) | ||
39 | (counter-b) | ||
40 | (counter-b) | ||
41 | (counter-b) | ||
42 | (counter-b) | ||
43 | (counter-a) | ||
44 | |||
45 | ;; Fibonacci. | ||
46 | (def fib (lambda (n) | ||
47 | (if (<= n 2) | ||
48 | 1 | ||
49 | (+ (fib (- n 1)) (fib (- n 2)))))) | ||
50 | (fib 15) | ||
51 | |||
52 | ;; Lambda capture. | ||
53 | (def a 20) | ||
54 | (def b (lambda () | ||
55 | (display a) | ||
56 | (newline) | ||
57 | (def a 42) | ||
58 | (display a) | ||
59 | (newline))) | ||
60 | |||
61 | (b) | ||
62 | (b) | ||
63 | |||
64 | |||
65 | ;; Infinite loop. (For teseting purposes) | ||
66 | ; (def test (lambda (n) | ||
67 | ; (print "ITER\n") | ||
68 | ; (if (<= n 2) | ||
69 | ; 'ok | ||
70 | ; (test (+ n 1))))) | ||
71 | |||
72 | ; (test 3) | ||