(define (decode bits tree)
(define (decode-1 bits current-branch)
(if (null? bits)
'()
(let ((next-branch (choose-branch (car bits) current-branch)))
(if (leaf? next-branch)
(cons (symbol-leaf next-branch)
(decode-1 (cdr bits) tree))
(decode-1 (cdr bits) next-branch)))))
(decode-1 bits tree))
爲什麼我們甚至需要decode-1
如果我們對decode
和decode-1
都使用相同的參數?爲什麼內部程序?
不,你不能「簡單地消除內部定義」。正如我的回答中所提到的,內部程序是一個閉包。事實上,即使你的尾遞歸定義仍然是一個閉包,所以你仍然無法將其提升到頂級過程,而無需添加額外的'tree'參數。 – 2015-03-04 15:21:52
Opps,對不起,我沒有注意到'tree'參數。前兩句應該去。 – 2015-03-04 18:49:27
你能解釋尾遞歸版本是如何工作的嗎?我似乎無法理解它在查看代碼......爲什麼如果比特是空的,就會反向acc? – user16655 2015-03-13 10:46:06