簡體   English   中英

方案中的遞歸求和函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM