Список частот 2 - проект Хаффмана
Ранее у меня был вопрос о добавлении символа в список частот ( Добавить символ в список частот), он был решен, но у меня снова возникли проблемы с остальной частью проекта. Следующие 2 функции работают:
Напишите функцию, которая создает список частот (из списка символов)
(statistiques '("a" "b" "r" "a" "c" "a" "d" "a" "b" "r" "a"))
→ (("a" 5) ("r" 2) ("b" 2) ("d" 1) ("c" 1))
Мой код:
(define statistiques
(lambda (l)
(if (null? l)
l
(ajoute1(car l)(statistiques (cdr l))))))
Напишите функцию, которая вставляет пару (символ и число, указывающее на вхождение этого символа в список), в список пар, отсортированный по номеру вхождения
(inserefreq '("b" 2) '(("d" 1) ("a" 5)))
→ (("d" 1) ("b" 2) ("a" 5))
(define inserefreq
(lambda (c l)
(cond ((null? l)
(list c))
((<= (cadr c) (cadar l))
(cons c l))
(else
(cons (car l) (inserefreq c (cdr l)))))))*
Тогда проблема со следующим, который просит отсортировать список частот путем последовательной вставки
(triefreq '(("a" 5) ("r" 2) ("b" 2) ("d" 1) ("c" 1)))
→ (("d" 1) ("c" 1) ("r" 2) ("b" 2) ("a" 5))
Мой код:
(define tirefreq
(lambda (l)
(inserefreq(car l) (tirefreq (cdr l)))))
Результат / ошибка:
1 ответ
Решение
Вы просто пропускаете базовый случай, когда l
пустой:
(define triefreq
(lambda (l)
(if (null? l)
'()
(inserefreq (car l) (triefreq (cdr l))))))