練習問題 P.101 any-pred, every-pred
any-pred は1つでも真になれば #t
真の要素が見つからないまま、リストの最後になれば#f
every-pred は1つでも真になれば #f
真の要素が見つからないまま、リストの最後になれば#t
(ただし、最初から空リストなら #f)
と思ったが、
それは前のページで説明されている any と every だった..
本文読んでいるときから違いが良く分からんなーと思っていたけど、
よくよく読んでみたら、any, every はリスト中の要素を対象とする。
any-pred, every-pred は述語自体が複数あるということだった。
ついでなので、自己定義の any と every も載せておきます。
(define (any pred) (define (any-job pred lis) (cond ((null? lis) #f) ((pred (car lis)) #t) (else (any-job pred (cdr lis))))) (lambda (lis) (any-job pred lis))) (define (every pred) (define (every-job pred lis) (cond ((null? lis) #t) ((pred (car lis)) (every-job pred (cdr lis))) (else #f))) (lambda (lis) (if (null? lis) #f (every-job pred lis)))) (define (any-pred pred . opt-pred) (define (any-pred-job pred-lis x) (cond ((null? pred-lis) #f) (((car pred-lis) x) #t) (else (any-pred-job (cdr pred-lis) x)))) (lambda (x) (any-pred-job (cons pred opt-pred) x))) (define (every-pred pred . opt-pred) (define (every-pred-job pred-lis x) (cond ((null? pred-lis) #t) (((car pred-lis) x) (every-pred-job (cdr pred-lis) x)) (else #f))) (lambda (x) (every-pred-job (cons pred opt-pred) x)))