1
我想弄清楚如何在Scheme中使用遞歸來完成相反順序(回到前面)的列表。我的研究表明,您可以在列表中使用反向函數,但我不想走這條路線。向後通過方案中的列表
我知道以下內容返回列表中的最後一個元素;
(caddr '(1 5 3))
returns 3
我希望能夠通過功能剩下的1 5發回,看看最後一個元素再次重複,直到列表耗盡
從左至右是很簡單的,你看看列表中的汽車併發回cdr。
我想弄清楚如何在Scheme中使用遞歸來完成相反順序(回到前面)的列表。我的研究表明,您可以在列表中使用反向函數,但我不想走這條路線。向後通過方案中的列表
我知道以下內容返回列表中的最後一個元素;
(caddr '(1 5 3))
returns 3
我希望能夠通過功能剩下的1 5發回,看看最後一個元素再次重複,直到列表耗盡
從左至右是很簡單的,你看看列表中的汽車併發回cdr。
先遞歸調用,然後處理car
。例如:
(define (process-in-reverse lst fun)
(when (not (null? lst))
(process-in-reverse (cdr lst) fun)
(fun (car lst))))
然後
> (process-in-reverse '(1 5 3) display)
351
如果你只是想扭轉結果如果後續調用都獨立於以前的話費,蓄能器會做,是尾遞歸:
(define (process-reverse-result lst fun)
(let loop ((lst lst) (res null))
(if (null? lst)
res
(loop (cdr lst)
(cons (fun (car lst)) res)))))
then
> (process-reverse-result '(1 5 3) add1)
'(4 6 2)
在[tag:scheme]中的ppl應該真的讓對方更滿意。如果不是我們,那麼誰呢?這是一個很好的答案,爲什麼直到現在它才被提升? –
在基礎步驟,遞歸步驟以及它們進入的順序中分解問題。提示:如果您首先執行遞歸步驟,然後執行基礎操作,則會遞歸遍歷整個列表,然後處理基礎案例,然後在堆棧展開時執行剩餘的元素。 – yan
函數'caddr'不返回'列表'中的最後一個元素;它返回'你的列表'中的最後一個元素。 – GoZoner
「reverse」有什麼問題? – ceving