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