2013-12-15 2 views
1

Раньше у меня возник вопрос о добавлении персонажа в список частот (Add a character to a frequency list), он был решен, но у меня снова возникли проблемы с остальной частью проекта. Следующие 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

+1

В вашем предыдущем вопросе кто-то хотел знать, на каком языке вы использовали, и вы сказали «Схема» (как я понял, как #! R6rs), но на вашем размещенном изображении здесь вы не используете Схему, но «Начальный студент с сокращенными списками ". У ваших языков есть ограничения, поэтому важно упомянуть об этом в ваших вопросах, иначе вы либо получите ответы #! Racket, либо #! R6rs. – Sylwester

+0

О, я не знал .. в классе у нас есть упражнения, говорящие «писать на Схеме», но мы на самом деле всегда используем либо этот вариант, либо Pretty Big, поэтому я думал, что это после всего языка Scheme, но немного отличается версии этого .. (возможно, я неправильно понял несколько вещей, сказанных в классе, так как он на французском ха-ха) – user3104814

ответ

0

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

+0

О, спасибо, я понятия не имею, как я этого не замечал .. я чувствую себя настолько немым: $ – user3104814

+0

Возможно, пора для перерыва ;-) – uselpa

+0

Хе-хе да, конечно, ... – user3104814