Список частот 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)))))

Результат/ошибка: error


person user3104814    schedule 15.12.2013    source источник
comment
В вашем предыдущем вопросе кто-то хотел узнать, какой язык вы используете, и вы сказали «Схема» (как я понял, как #!r6rs), но на вашем размещенном здесь изображении вы используете не «Схему», а «Начинающий ученик» со списками сокращений. Ваши языки имеют ограничения, поэтому важно упомянуть об этом в своих вопросах, иначе вы получите ответы #!racket или #!r6rs.   -  person Sylwester    schedule 16.12.2013
comment
О, я не знал... в классе у нас есть упражнения, говорящие о написании в Scheme, но на самом деле мы всегда используем либо эту опцию, либо Pretty Big, поэтому я подумал, что это все-таки языковая Scheme, но просто немного разные ее версии. ..(вероятно, я неправильно понял несколько вещей, сказанных в классе, так как это по-французски, ха-ха)   -  person user3104814    schedule 16.12.2013


Ответы (1)


Вам просто не хватает базового случая, когда l пусто:

(define triefreq
  (lambda (l)
    (if (null? l)
        '()
        (inserefreq (car l) (triefreq (cdr l))))))
person uselpa    schedule 15.12.2013
comment
О, спасибо, я не понимаю, как я этого не заметила.. чувствую себя такой тупицей:$ - person user3104814; 16.12.2013
comment
Может пора отдохнуть ;-) - person uselpa; 16.12.2013