我想在流中添加所有连续值并返回一个列表。 喜欢, 流:(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)))))
答案 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)))
...