[英]Recursive sum function in 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)))))
您確實要檢查是否有空數據流,這可以防止(head prime-stream)
失敗。
在具有一個元素的流的情況下, (head prime-stream)
將評估為(head prime-stream)
中的單個元素,而(tail prime-stream)
將評估為nil
。
(head (tail prime-stream))
然后將評估為(head nil)
,這是一個問題。
(+ (head prime-stream)
(head (tail prime-stream))
尾巴可能是'(),在這種情況下,(頭(尾))等於(head'())
您需要為此替換nil條件,取而代之的是咀嚼尾巴的尾巴,然后將最終的總和歸納為'()
就像是
(if (empty-stream? (cdr (cdr p)))
(+(car p) (car (cdr p)))
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.