さかもとのブログ

つらつらと

第8章演習問題(P.101)

(define (my-any-pred . pred)
  (lambda (x)
    (define (my-any-pred-core preds x)
      (cond [(null? #?=preds) #f]
            [((car preds) x) #t]
            [else (my-any-pred-core (cdr preds) x)]))
    (my-any-pred-core pred x)))

(define (my-any-pred . pred)
  (lambda (x)
    (cond [(null? pred) #f]
          [((car pred) x) #t]
          [else (apply my-any-pred (cdr pred))])))

(define (my-every-pred . pred)
  (if (null? pred) #f
      (lambda (x)
        (define (my-every-pred-core preds x)
          (cond [(null? preds) #t]
                [((car preds) x) (my-every-pred-core (cdr preds) x)]
                [else #f]))
        (my-every-pred-core pred x))))

できれば余計な関数は作りたくないので,下の方にしたいのだが,applyを使ったら再帰にならないので,上の方にしなければいけない.