方案中的递归和函数

时间:2014-03-22 20:48:26

标签: scheme

我想在流中添加所有连续值并返回一个列表。 喜欢, 流:(1,2,3,4) 输出:(3,5,7) 我这里有这个代码,但它给了我一个错误 汽车:合同违规   预期:对?   给出:'()

我尝试过单独使用头部和尾部,它们工作正常!那么这里有什么不对吗?

(define (sum-primes prime-stream)
  (if (empty-stream? prime-stream)
  '()
  (cons (+ (head prime-stream) (head (tail prime-stream)))
        (sum-primes (tail prime-stream)))))

2 个答案:

答案 0 :(得分:0)

您确实检查空流,这会阻止(head prime-stream)失败。

对于包含一个元素的流,(head prime-stream)将评估为流中的单个元素,而(tail prime-stream)将评估为nil

然后

(head (tail prime-stream))将评估为(head nil),这是一个问题。

答案 1 :(得分:0)

 (+ (head prime-stream) 
 (head (tail prime-stream))

尾巴可能是'(),在这种情况下,(头部(尾部))相当于(头部'())

你需要为此替换你的零条件,而是检查尾巴的尾部,然后将最终的金额返回到'()

类似

(if (empty-stream? (cdr (cdr p)))
(+(car p) (car (cdr p)))
...