;; ;; 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)