1

私が SICP 2.20 用に書いた関数は次のとおりです。

(define (same-parity x . y)
  (if (null? (car y)
  '()
  (if (= (even? (car y)) (even? x))
     (cons (car y) (same-parity (cons x (cdr y))))
     (same-parity (cons x (cdr y))))))

そして、私はそれを呼び出そうとします

(same-parity 1 2 3 4 5 6 7)

私が得るエラーは次のとおりです。

equal は #t と #f で機能すると思いました...

オンラインで見つけたコードの例は次のとおりです。実行したところ、動作しました。しかし、私は何を間違っていますか?

(define (same-parity a . rest)
  (define (filter rest)
    (cond ((null? rest) '())
          ((= (remainder a 2) (remainder (car rest) 2))
           (cons (car rest) (filter (cdr rest))))
          (else
            (filter (cdr rest)))))
  (filter (cons a rest)))
4

1 に答える 1

3

= 手続きは数字を受け入れます。それでも?数値ではなくブール値を返します。

同等に使用しますか? = の代わりに。

同等?ブール値で動作します。

たとえば、REPL で:

> (even? 2)
#t

> (= (even? 2) (even? 2))
=: expects type <number> as 1st argument, given: #t; other arguments were: #t

> (equal? (even? 2) (even? 2))
#t
于 2010-10-11T02:17:47.970 に答える