遅延評価によるifの再実装
組み込みの条件式(ifやcondなど)を使わずに遅延評価を使ってifを再実装してみました。
もっと簡潔に書けそうな気がしますが、とりあえずここまで。
(define-syntax my-if (syntax-rules () ((_ test then else) (let ((proc (lambda (test then else) (or (and (force test) (force then)) (force else))))) (proc (delay test) (delay then) (delay else)))))) (define (fact n) (my-if (<= n 1) 1 (* n (fact (- n 1))))) (display (fact 10))