2006/07/23

真偽値からなるリストを持っていて、その or を知りたい。つまり、真偽値のリストに #t があるかどうか確かめたい。

最初はブール演算できると信じてた。
gosh> (fold or #f '(#f #f #t #f))
*** ERROR: invalid application: (#<syntax or> #f #f)

この期におよんでプロシージャとシンタックス形式の違いに戸惑うとは。しかし困ったな。シンタックス形式だと apply もできない。
gosh> (apply or '(#f #f #t #f))
*** ERROR: invalid application: (#<syntax or> #f #f #t #f)

常套手段。
(define (or-bool-list ls)
(if (null? ls) #f (or (car ls) (or-bool-list (cdr ls)))))
(or-bool-list '(#f #f #t #f))

いんちき。
(member #t '(#f #f #t #f))

もっとかっこいい方法がいいなあ。

No comments :