49 lines
1.5 KiB
Scheme
49 lines
1.5 KiB
Scheme
(include stdio.h)
|
|
|
|
(fn sum ((a int) (b int)) int
|
|
(return (+ a b)))
|
|
|
|
;;; A lambda captures nothing and is a bare function pointer; a closure
|
|
;;; captures and is a value carrying its own environment
|
|
(fn make-adder ((a int)) (closure ((int)) int)
|
|
(return (closure ((b int)) int (a)
|
|
(return (+ a b)))))
|
|
|
|
(pub fn main () int
|
|
(var a int 10)
|
|
(var b int 20)
|
|
(var sum-fn (fn ((int) (int)) int) sum)
|
|
|
|
(var sum-lambda (fn ((int) (int)) int)
|
|
|
|
(lambda ((a int) (b int)) int
|
|
(return (+ a b))))
|
|
|
|
(var sum-lambda-2 (fn ((int)) int)
|
|
|
|
(lambda ((a int)) int
|
|
(return (+ a 20))))
|
|
|
|
(printf "Hello from main fn!\n")
|
|
(printf "We will now perform some function calling.\n")
|
|
|
|
(printf "Calling fn ptr: %d\n" (sum-fn a b))
|
|
(printf "Calling lambda: %d\n" (sum-lambda a b))
|
|
(printf "Calling other lambda: %d\n" (sum-lambda-2 a))
|
|
(printf "Calling lambda inplace: %d\n" ((lambda ((a int) (b int)) int
|
|
(return (+ a b 100)))
|
|
a b))
|
|
|
|
(var l-1 (fn ((int)) int)
|
|
(lambda ((a int)) int
|
|
(var l-2 (fn ((int)) int)
|
|
(lambda ((a int)) int
|
|
(return (+ 60 a))))
|
|
(return (+ 600 (l-2 a)))))
|
|
(printf "Calling nested lambdas: %d\n" (l-1 6))
|
|
|
|
(var add-10 (closure ((int)) int) (make-adder 10))
|
|
(var add-20 (closure ((int)) int) (make-adder 20))
|
|
(printf "Calling closures: %d %d\n" (add-10 24) (add-20 24))
|
|
(return 0))
|