aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-14 17:05:37 +0200
committerBad Diode <bd@badd10de.dev>2021-10-14 17:05:37 +0200
commit530ed15ec941194e661010498cf30b7842710939 (patch)
treeccd1d771350453b59049e06ac224728f321f2b15 /examples
parentab23395b1fc88bbc63bef88de3477cc316857ace (diff)
downloadbdl-530ed15ec941194e661010498cf30b7842710939.tar.gz
bdl-530ed15ec941194e661010498cf30b7842710939.zip
Fix lambda and closures
Diffstat (limited to 'examples')
-rw-r--r--examples/variables.bdl56
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)