2024-08-29 22:14:33 +00:00
|
|
|
;; -*- mode: lisp; -*-
|
|
|
|
|
|
|
|
(fn fact (n)
|
|
|
|
(if (<= n 0)
|
|
|
|
1
|
|
|
|
(* n (fact (- n 1)))))
|
|
|
|
|
|
|
|
(assert (= (fact 12) 479001600))
|
|
|
|
|
|
|
|
|
|
|
|
(let ((square (fn (x) (* x x))))
|
|
|
|
(assert (= (square 4) 16))
|
|
|
|
)
|
2024-08-31 16:30:10 +00:00
|
|
|
|
2024-08-31 17:10:17 +00:00
|
|
|
;; Closures should work at least across one scope
|
2024-08-31 16:30:10 +00:00
|
|
|
(let ((x 42))
|
|
|
|
(assert (= ((fn (y) (+ x y) 1)
|
|
|
|
43)))
|
|
|
|
)
|
2024-08-31 17:10:17 +00:00
|
|
|
|
|
|
|
;; Closures should work across multiple scopes
|
|
|
|
(let ((x 42))
|
|
|
|
(assert (=
|
|
|
|
(((fn (y)
|
|
|
|
(fn () (+ x y)))
|
|
|
|
1))
|
|
|
|
43))
|
|
|
|
)
|