题
我为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)
我遇到的错误是:“对象#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