From 14814ecbf53760654aab34e0613abf347a54113f Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 14 Oct 2021 18:06:54 +0200 Subject: Add fun sugar for function variable declaration --- examples/variables.bdl | 80 ++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 45 deletions(-) (limited to 'examples') diff --git a/examples/variables.bdl b/examples/variables.bdl index 2e2543a..7b343d1 100644 --- a/examples/variables.bdl +++ b/examples/variables.bdl @@ -2,64 +2,55 @@ ;; 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)) +(print "(def a 20)") (def a 20) (newline) +(print "((lambda (a b) (+ 10 a b)) 1 2) -> ") ((lambda (a b) (+ 10 a b)) 1 2) +(print "((lambda (a b) (+ 10 a b)) a 3) -> ") ((lambda (a b) (+ 10 a b)) a 3) +(print "(def myfun (lambda (a b) (+ a b))) (myfun 6 9) -> ") (def myfun (lambda (a b) (+ a b))) (myfun 6 9) +(print "(fun myfun (a b) (+ a b)) (myfun 6 9) -> ") (fun myfun (a b) (+ a b)) (myfun 6 9) +(print "(+ 1 (myfun 10 (myfun a a)) 30) -> ") (+ 1 (myfun 10 (myfun a a)) 30) +(print "(myfun 10 (myfun 5 0)) -> ") (myfun 10 (myfun 5 0)) ;; Closures. -(def make-counter (lambda () +(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)) - -(def counter-a (make-counter)) -(def counter-b (make-counter)) -(counter-a) -(counter-a) -(counter-b) -(counter-b) -(counter-b) -(counter-b) -(counter-a) + 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) -> ") (counter-a) +(print "(counter-b) -> ") (counter-b) +(print "(counter-a) -> ") (counter-a) +(print "(counter-a) -> ") (counter-a) +(print "(counter-a) -> ") (counter-a) +(print "(counter-b) -> ") (counter-b) +(print "(counter-b) -> ") (counter-b) +(print "(counter-b) -> ") (counter-b) ;; Fibonacci. -(def fib (lambda (n) - (if (<= n 2) - 1 - (+ (fib (- n 1)) (fib (- n 2)))))) -(fib 15) +(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) -> ")(fib 15) ;; Lambda capture. -(def a 20) -(def b (lambda () +(print "(fun b () (display a) (print \" --- \") (def a 42) (display a) (newline))") (newline) +(fun b () (display a) - (newline) + (print " --- ") (def a 42) (display a) - (newline))) + (newline)) -(b) -(b) +(print "(b) -> ") (b) +(print "(b) -> ") (b) ;; Infinite loop. (For teseting purposes) @@ -68,5 +59,4 @@ ; (if (<= n 2) ; 'ok ; (test (+ n 1))))) - ; (test 3) -- cgit v1.2.1