我的方案代码有什么问题?

时间:2010-10-11 02:09:23

标签: scheme sicp

我为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)))

1 个答案:

答案 0 :(得分: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