;; ;; Variable declarations and updates ;; (print "(def a 20)") (def a 20) (newline) (print "((lambda (a b) (+ 10 a b)) 1 2) -> ") (display ((lambda (a b) (+ 10 a b)) 1 2)) (newline) (print "((lambda (a b) (+ 10 a b)) a 3) -> ") (display ((lambda (a b) (+ 10 a b)) a 3)) (newline) (print "(def myfun (lambda (a b) (+ a b))) (myfun 6 9) -> ") (def myfun (lambda (a b) (+ a b))) (display (myfun 6 9)) (newline) (print "(fun myfun (a b) (+ a b)) (myfun 6 9) -> ") (fun myfun (a b) (+ a b)) (display (myfun 6 9)) (newline) (print "(+ 1 (myfun 10 (myfun a a)) 30) -> ") (display (+ 1 (myfun 10 (myfun a a)) 30)) (newline) (print "(myfun 10 (myfun 5 0)) -> ") (display (myfun 10 (myfun 5 0))) (newline) ;; Closures. (print "(fun make-counter () (def value 0) (def counter (lambda () (set! value (+ value 1)) value)) counter)") (newline) (fun make-counter () (def value 0) (def counter (lambda () (set! value (+ value 1)) value)) counter) (print "(def counter-a (make-counter))") (def counter-a (make-counter)) (newline) (print "(def counter-b (make-counter))") (def counter-b (make-counter)) (newline) (print "(counter-a) -> ") (display (counter-a))(newline) (print "(counter-b) -> ") (display (counter-b))(newline) (print "(counter-a) -> ") (display (counter-a))(newline) (print "(counter-a) -> ") (display (counter-a))(newline) (print "(counter-a) -> ") (display (counter-a))(newline) (print "(counter-b) -> ") (display (counter-b))(newline) (print "(counter-b) -> ") (display (counter-b))(newline) (print "(counter-b) -> ") (display (counter-b))(newline) ;; Fibonacci. (print "(fun fib (n) (if (<= n 2) 1 (+ (fib (- n 1)) (fib (- n 2)))))") (newline) (fun fib (n) (if (<= n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) (print "(fib 15) -> ") (display (fib 15))(newline) ;; Lambda capture. (print "(fun b () (display a) (print \" --- \") (def a 42) (display a) (newline))") (newline) (fun b () (display a) (print " --- ") (def a 42) (display a) (newline)) (print "(b) -> ") (b) (print "(b) -> ") (b) ;; Infinite loop. (For teseting purposes) ; (def test (lambda (n) ; (print "ITER\n") ; (if (<= n 2) ; 1 ; (test (+ n 1))))) ; (test 3)