プログラミングGauche 8.3 真偽値を扱う手続き 練習問題

プログラミングGauche 練習問題(p101)を解く。
手続き any-predevery-pred を自分で定義する。

any-pred

;; 最初に思いついた解答
(define (any-pred . preds)
  (define (iter preds x)
    (if (null? preds)
        #f
        (if ((car preds) x)
            #t
            (iter (cdr preds) x))))
  (lambda (x) (iter preds x)))

;; apply を使ったバージョン
(define (any-pred . preds)
  (lambda (x)
          (cond ((null? preds) #f)
                (((car preds) x) #t)
                (else
                  ((apply any-pred (cdr preds)) x)))))

実行結果

(define positive-or-integer? (any-pred integer? positive?))
(positive-or-integer? 4)
gosh> #t
(positive-or-integer? 4.0)
gosh> #t
(positive-or-integer? 4.1)
gosh> #t
(positive-or-integer? -4.1)
gosh> #f
(positive-or-integer? -4)
gosh> #t

every-pred

;; 最初に思いついた解答
(define (every-pred . preds)
  (define (iter preds x)
    (if (null? preds)
        #t
        (if ((car preds) x)
            (iter (cdr preds) x)
            #f)))
  (lambda (x) (iter preds x)))

;; apply を使ったバージョン
(define (every-pred . preds)
  (lambda (x)
          (cond ((null? preds) #t)
                (((car preds) x) ((apply every-pred (cdr preds)) x))
                (else #f))))

実行結果

(define positive-integer? (every-pred integer? positive?))
(positive-integer? 4)
gosh> #t
(positive-integer? 4.0)
gosh> #t
(positive-integer? 4.1)
gosh> #f
(positive-integer? -4.1)
gosh> #f
(positive-integer? -4)
gosh> #f
プログラミングGauche
プログラミングGauche

posted with amazlet at 08.11.14
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 22775
«
»