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章は終わり。