Целью было создать дерево huffman (google, если вы не знаете, что это такое), выход которого не содержит веса значения, только значения, расположенные в листах, удерживаемые заполнителем " внутренний "с. Я создал рабочую функцию, которая выглядит корректно, кроме того, с каждым «внутренним» присутствуют дополнительные нулевые списки, которых не должно быть. Если бы кто-то мог взглянуть на код и увидеть мою ошибку или способ ее оптимизации, я был бы признателен.Схема R5RS, функция дерева Хаффмана
(define (build-huffman lst)
(let ((x (insert-list-of-pairs lst '())))
(define (huffman-help heap)
(if (null? (remove-min heap))
heap
(let ((rx (remove-min heap)))
(if (list? (h-min heap))
(huffman-help (insert (cons (make-internal-node (value (h-min heap))
(value (h-min rx)))
(+ (weight (h-min rx))
(weight (h-min heap))))
(remove-min rx)))
(huffman-help (insert (cons (make-internal-node (create-heap (value (h-min heap)) '() '())
(create-heap (value (h-min rx)) '() '()))
(+ (weight (h-min rx))
(weight (h-min heap))))
(remove-min rx)))))))
(car (car (huffman-help x)))))
Некоторые из функций являются ясными, и я знаю, что проблема находится внутри этого кода, а не какая-либо другая функция.
(insert-list-of-pair) - отображает список пар, например. "((№ 7) (да. 4))" и вставляет его в кучу.
(insert) - вводит одну пару в кучу.
(удалить-мин) - уменьшает минимальное значение кучи.
(макияж внутреннего узла 0-дерево 1-дерево) -> (список «внутренний 0-дерево 1-дерево)
вы заметили, что довольно заманчиво делать то, что вы делаете, и писать «google, если вы не знаете, что такое проблема is_»? ;-) – Marged
Я только попросил google, что такое дерево хаффмана, потому что википедия или любой другой источник смогут объяснить это намного лучше, чем я. И поиск в googling не дает никаких результатов. – MitchG