|
| 1 | +; Test lambda as an alias for fn |
| 2 | + |
| 3 | +(println "Testing lambda alias...") |
| 4 | + |
| 5 | +; Test 1: lambda and fn produce identical functions |
| 6 | +(def square-fn (fn (n) (* n n))) |
| 7 | +(def square-lambda (lambda (n) (* n n))) |
| 8 | + |
| 9 | +(if (= (square-fn 5) (square-lambda 5)) |
| 10 | + (println "lambda and fn produce identical results") |
| 11 | + (println "lambda and fn differ")) |
| 12 | + |
| 13 | +; Test 2: lambda with multiple parameters |
| 14 | +(def add (lambda (a b) (+ a b))) |
| 15 | +(if (= (add 3 4) 7) |
| 16 | + (println "lambda with multiple parameters works") |
| 17 | + (println "lambda with multiple parameters failed")) |
| 18 | + |
| 19 | +; Test 3: lambda in higher-order functions |
| 20 | +(def apply-twice (lambda (f x) (f (f x)))) |
| 21 | +(def double (lambda (n) (* n 2))) |
| 22 | +(if (= (apply-twice double 3) 12) |
| 23 | + (println "lambda works in higher-order functions") |
| 24 | + (println "lambda in higher-order functions failed")) |
| 25 | + |
| 26 | +; Test 4: lambda with tail recursion |
| 27 | +(def sum-lambda (lambda (n acc) |
| 28 | + (if (<= n 0) |
| 29 | + acc |
| 30 | + (sum-lambda (- n 1) (+ acc n))))) |
| 31 | + |
| 32 | +(if (= (sum-lambda 100 0) 5050) |
| 33 | + (println "lambda supports tail recursion") |
| 34 | + (println "lambda tail recursion failed")) |
| 35 | + |
| 36 | +; Test 5: Mixed usage - fn calling lambda and vice versa |
| 37 | +(def fn-func (fn (x) (* x 2))) |
| 38 | +(def lambda-func (lambda (x) (fn-func (+ x 1)))) |
| 39 | +(if (= (lambda-func 4) 10) |
| 40 | + (println "fn and lambda interoperate seamlessly") |
| 41 | + (println "fn/lambda interop failed")) |
| 42 | + |
| 43 | +(println "All lambda alias tests passed!") |
0 commit comments