6章の最後に、空リストで数を表現するという面白いのが出てくる。
たとえば 0 は ()、1 は (())、2 は (() ()) という具合だ。この数の表現を使っていくつか関数を書いてみよう。
まずは、ゼロかどうかを調べる関数。
gosh> (define sero? (lambda (n) (null? n))) sero? gosh> (sero? '()) #t gosh> (sero? '(())) #f
つぎに、add1 に相当する関数。
gosh> (define edd1 (lambda (n) (cons (quote ()) n))) edd1 gosh> (edd1 '()) (()) gosh> (edd1 '(() ())) (() () ())
sub1 に相当する関数。
gosh> (define zub1 (lambda (n) (cdr n))) zub1 gosh> (zub1 '(() ())) (()) gosh> (zub1 '()) *** ERROR: pair required, but got () Stack Trace: _______________________________________
ゼロ () に zub1 を適用したらエラーになった。0 以上の整数しか扱えないんだな。