这是我的霍夫曼编码,它返回一个空列表。我的目的是让它将所有对添加到listenr1
但它接缝只返回一个空列表。我不确定为什么它不会附加,但我认为我误解了Scheme编程的一个基本部分。我不想使用append*
。我认为附加可能是错误的,但我不确定为什么。有没有办法在每次附加时替换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)
答案 0 :(得分:0)
您编写的代码看起来是一个不错的开始,但是它混合了递归和非递归的习惯用法。
霍夫曼树(我想)是叶?在这种情况下,它具有符号和重量。否则,它有左分支和右分支。
因此,我们可以定义一个递归函数来列出所有叶子,如下所示:
(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
))
希望有帮助!