04/09/13 22:02:21
うー、そういう問題があるのですか…。
スペシャルフォームを引数に取れると便利だという例をちょっと
書いてみました。
関数と違い、すべての要素を評価しないスペシャルフォームなので、
途中で結果がわかれば、リストを最後まで評価せずに止まります。
テストはしておりませんので、バグっていたらごめんなさい。
;関数を返す関数。引数に and か or を取る。
(define make-function
(lambda (s-form)
(lambda (list0)
(s-form (atom? (car list0))
((make-function s-form) (cdr list0))))))
;リストにアトムが含まれるか?
(define has-atom? (make-function or))
;リストの要素がすべてアトムか?
(define all-atom? (make-function and))