aboutsummaryrefslogtreecommitdiffstats
path: root/examples/variables.bdl
blob: 2e2543a0cc31145b7109638fcb95ccce7fc67e73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;;
;; Variable declarations and updates
;;

(supress-errors true)
(print "(error? (def a 1)) -> ") (error? (def a 1))
(print "a -> ") a
(print "(error? (def a 300)) -> ") (error? (def a 300))
(print "a -> ") a
(print "(error? (def a \"strings\")) -> ") (error? (def a "strings"))
(print "a -> ") a
(print "(error? (def a 1)) -> ") (error? (def a '(quoted symbols 123 or "strings")))
(print "a -> ") a
(print "(error? (set! a 42)) -> ") (error? (set! a 42))
(print "a -> ") a
(print "(error? (set! b 99)) -> ") (error? (set! b 99))
(lambda (a b) (+ 10 a b))

(def a 20)
((lambda (a b) (+ 10 a b)) 1 2)
((lambda (a b) (+ 10 a b)) a 3)
(def myfun (lambda (a b) (+ a b)))
(myfun 6 9)
(+ 1 (myfun 10 (myfun a a)) 30)
(myfun 10 (myfun 5 0))

;; Closures.
(def make-counter (lambda ()
    (def value 0)
    (def counter (lambda ()
        (set! value (+ value 1))
        value))
    counter))

(def counter-a (make-counter))
(def counter-b (make-counter))
(counter-a)
(counter-a)
(counter-b)
(counter-b)
(counter-b)
(counter-b)
(counter-a)

;; Fibonacci.
(def fib (lambda (n)
  (if (<= n 2)
      1
      (+ (fib (- n 1)) (fib (- n 2))))))
(fib 15)

;; Lambda capture.
(def a 20)
(def b (lambda ()
    (display a)
    (newline)
    (def a 42)
    (display a)
    (newline)))

(b)
(b)


;; Infinite loop. (For teseting purposes)
; (def test (lambda (n)
;     (print "ITER\n")
;   (if (<= n 2)
;     'ok
;     (test (+ n 1)))))

; (test 3)