Список частот 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))))))
Другие вопросы по тегам