one?
関数 one? は、引数が 1 のとき真、そうでないとき偽を返す。
こんなの簡単だ。
(use mymodule)
(define one?
(lambda (n)
(o= n 1)))
(print (one? 1))
(print (one? 10))
実行:
^o^ > gosh -I. one.scm #t #f
ほらできた。
ふたたび rempick
今度は、rempick を one? を使って書け、と。これも簡単、前の定義で (zero? (sub1 n)) としていたところを (one? n) にすればいいだけだ。
(use mymodule)
(define one?
(lambda (n)
(o= n 1)))
(define rempick
(lambda (n lat)
(cond
((one? n) (cdr lat))
(else (cons (car lat) (rempick (sub1 n) (cdr lat)))))))
(print (rempick 3 '(lemon meringue salty pie)))
実行:
^o^ > gosh -I. rempick2.scm (lemon meringue pie)
OK!
これで4章は終わり。