(include stdio.h) (fn sum ((a int) (b int)) int (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)) ;; Not supported yet -- captures belong to `closure' now, see ;; Function-values.org ;; (fn make-adder ((a int)) (closure ((int)) int) ;; (return (closure ((b int)) int (a) ;; (return (+ a b))))) ;; ;; (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))