もうちょっと述語
8章3節、真偽値に関する手続き。
等価述語以外の述語
前回は等価述語だったけど、等価述語以外にも述語はたくさんありますよ、と。
型を判定したり、値の性質を判定したり。
詳しくは追々出てくるっぽい。
否定
真偽を逆転するnot手続きは以下。
gosh> (not #t) #f gosh> (not #f) #t
うん、かんたん。
述語を引数にとる手続き
anyとeveryの2つの手続きが登場。
これらは述語とリストを受け取って、リストの中に述語を満たすものがあるかどうか調べる手続き。
anyは、リストの要素が1つでも述語を満たすものがあれば#tになる。
everyは、リストの要素全てが述語を満たせば#tになる。
gosh> (any odd? '(1 2 3 4)) #t gosh> (any odd? '(2 4 6)) #f gosh> (every odd? '(1 2 3 4)) #f gosh> (every odd? '(1 3 5)) #t
うん、簡単。
次は、any-predとevery-pred。両方共複数の述語を引数に取り、述語を返す。
any-predは、受け取った述語のうち1つでも満たせば#tを返す述語を返す。
every-predの方は、受け取った述語をすべて満たせば#tを返す述語を返す。
gosh> (define positive-integer? (every-pred integer? positive?)) positive-integer? gosh> (positive-integer? 4) #t gosh> (positive-integer? -3) #f gosh> (positive-integer? 2.4) #f
最後に、comprement。
comprementは引数で受け取った述語が、#tを返すような値に対して#fを返し、#fを返すような値に対して#tを返す述語を返す。
gosh> (define nonpositive? (comprement positive?)) nonpositive? gosh> (nonpositive? 5) #f gosh> (nonpositive? -3) #t
あまのじゃくな手続きができた。