加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

【SICP练习】95 练习2.68

发布时间:2020-12-13 20:16:45 所属栏目:PHP教程 来源:网络整理
导读:练习2.68 先要导入练习2.67中的sample-tree。这道题要求我们写出能够根据给定的树产生出给定符号的2进制位表的函数encode-symbol,这个函数还要能够在遇到未在树中出现的符号时报错。这个函数将要在给定的树中查找给定符号的叶子节点,并记录下寻觅进程中的

练习2.68

先要导入练习2.67中的sample-tree。这道题要求我们写出能够根据给定的树产生出给定符号的2进制位表的函数encode-symbol,这个函数还要能够在遇到未在树中出现的符号时报错。这个函数将要在给定的树中查找给定符号的叶子节点,并记录下寻觅进程中的左右方向,固然了,如书中所说,向左则用0,向右则用1。因此该函数可以以下列出。我们先来写那个检测毛病的谓词。

(define (symbol-in-tree? gven-symbol tree) (not (false? (find (lambda (s) (eq? s given-symbol)) (symbols tree))))) (define (encode-symbol symbol tree) (cond ((leaf? tree) ‘()) ((symbol-in-tree? symbol (left-branch tree)) (cons 0 (encode-symbol symbol (left-branch tree)))) ((symbol-in-tree? symbol (right-branch tree)) (cons 1 (encode-symbol symbol (right-branch tree)))) (else (error “Error: symbol not in this tree!”)))) 如此1来即可以得出encode了。 (define (encode message tree) (if (null? message) ‘() (append (encode-symbol (car message) tree) (encode (cdr message) tree))))

通过测试我们发现和上1题中的结果完全符合,如前面所说要导入sample-tree。

(encode( a d a b b c a) sample-tree) ;Value: (0 1 1 0 0 1 0 1 0 1 1 1 0)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读