「4.2.2 遅延評価の解釈系」を参考に、遅延評価できるように修正してみた。
https://github.com/takeisa/LispInCommonLisp/tree/lazy_evaluation
ifの反対のunlessを作って試してみる。
CL-USER> (repl) LISP> (define (unless condition usual exceptional) (if condition exceptional usual)) OK LISP> (unless (= 1 0) 'hoge (/ 1 0)) HOGE
引数の(/ 1 0)は評価しないで、'hoge を返している。
cons,car,cdrを使えるようにして、前章のストリームで作成した無限リストを作ってみようとしたが、今の実装では、Common Lispの関数をそのまま使おうとすると、全ての引数をforceするようになっているので、簡単にできない。
5章のレジスタ計算機まで、早めに進みたいので後回しにしよう。