質問
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は正しいタイプではありません。」
私は#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)))
解決
=手順は数値を受け入れます。それでも?数ではなくブール値を返します。
平等に使用しますか? =の代わりに。
同等?ブール人で動作します。
たとえば、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
所属していません StackOverflow