我有這樣的代碼:我將如何去做這個尾遞歸?
(define (prog1 x y)
(let ([rel (related x y)])
(cond
[(null? rel) (list x)]
[else (cons x (map (lambda (d) (prog1 (neighbour d) y)) rel))])))
我想要做的是試圖使它尾遞歸。我知道,我需要做的是這樣的:
(define (prog1 x y)
(prog1-iter x y `()))
(define (prog1-iter x y acc)
(...
))
但我不確定如何從我的代碼這個代碼去...我認爲這是因爲原中有一張地圖,而且我不確定如何將其併入prog1-iter
。有人能指出我正確的方向!
看到最初的算法可能會有所幫助,如果它是衆所周知的並且存在一個必要的解決方案,那就更好了。這將使它更容易轉換爲功能性的,尾遞歸的實現。 –