Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 我的方案代码有什么问题?_Scheme_Sicp - Fatal编程技术网

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

Scheme 我的方案代码有什么问题?,scheme,sicp,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) 我得到的错误是: 作

我为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)
我得到的错误是: 作为第一个参数传递给integer 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
>(偶数?2)
#t
>(=(偶数2)(偶数2))
=:期望类型作为第一个参数,给定:#t;其他论点是:#t
>(相等?(偶数2)(偶数2))
#t

您不应该给它一个列表吗?我试过了,没用。为了澄清,我发现作为解决方案的代码与给定调用的预期效果一样。