[英]List all leaves of Huffman tree
這是我的霍夫曼編碼,返回一個空列表。 我的目的是使其將所有對添加到listenr1
但它只能返回一個空列表。 我不確定為什么不附加,但我認為我誤解了Scheme編程的基本部分。 我不想使用append*
。 我認為附加可能是錯誤的,但是我不確定為什么。 有沒有一種方法可以listenr1
每次附加后都替換listenr1
?
(define (huffman-leafs tree)
(let ((listenr1 '()))
(define (iterator currentbranch)
(let ((left (left-branch currentbranch))
(right (right-branch currentbranch)))
(if (leaf? left)
(list (symbols left) (weight left))
(append listenr1 (iterator left)))
(if (leaf? right)
(list (symbols right) (weight right))
(append listenr1 (iterator right)))))
(iterator tree)
listenr1))
(huffman-leafs mytree)
您編寫的代碼看起來是一個不錯的開始,但是它混合了遞歸和非遞歸的習慣用法。
霍夫曼樹(我想)是葉? 在這種情況下,它具有符號和重量。 否則,它具有左分支和右分支。
因此,我們可以定義一個遞歸函數來列出所有葉子,如下所示:
(define (huffman-leafs tree)
(if (leaf? tree)
;;; list this leaf alone
;;; else, use recursion (huffman-leafs (left-branch tree)) and right branch
;; and APPEND those together
))
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.