From 530ed15ec941194e661010498cf30b7842710939 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 14 Oct 2021 17:05:37 +0200 Subject: Fix lambda and closures --- examples/variables.bdl | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'examples') 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 @@ (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) -- cgit v1.2.1