频率表2 - 霍夫曼项目

时间:2013-12-15 19:49:59

标签: scheme racket huffman-code

以前我有一个关于在频率列表中添加一个字符(Add a character to a frequency list)的问题,它已经解决了,但我在项目的其余部分再次遇到问题。接下来的两个功能正在起作用:

编写一个创建频率列表的功能(来自字符列表)

(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))))))

编写一个插入一对的函数(一个字符和一个表示该列表中出现该字符的数字),在按出现次数排序的对列表中 < / p>

(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 个答案:

答案 0 :(得分:0)

l为空时,您只是错过了基本情况:

(define triefreq
  (lambda (l)
    (if (null? l)
        '()
        (inserefreq (car l) (triefreq (cdr l))))))