首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确粘贴括号中的方案?

如何正确粘贴括号中的方案?
EN

Stack Overflow用户
提问于 2016-04-17 07:15:28
回答 2查看 154关注 0票数 0

我不明白为什么我这么做:

代码语言:javascript
运行
复制
(cons (list 1 2) (list 3 4))

我得到了

代码语言:javascript
运行
复制
((1 2) 3 4) , but not a ((1 2) (3 4))

代码语言:javascript
运行
复制
         .__4
        / \
       .  3
      / \
     1   2`

这是一棵三元树。左子二叉树有两片叶子。中间和右边的孩子只是一片叶子。

我假设我有带有两个子树的((1 2) (3 4))和二叉树(每个子树都是二叉树)。

那么,为什么预防犯罪中心(第103页)作者画的是三元树,而不是二叉树呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-17 19:40:17

让我们使用这个翻译:

代码语言:javascript
运行
复制
(cons a b)  =   /\           and empty  = .
               a  b

首先,我们有两个清单:

代码语言:javascript
运行
复制
(list 1 2) = (cons 1 (cons 2 empty)) =   /\
                                         1 /\
                                           2 .

(list 3 4) = (cons 3 (cons 4 empty)) =   /\
                                         3 /\
                                           4 .

在这两个列表上使用cons提供:

代码语言:javascript
运行
复制
(cons (list 1 2) (list 3 4)) = (cons (cons 1 (cons 2 empty))
                                     (cons 3 (cons 4 empty)))
                             =    / \
                                 /\  /\
                                1 /\ 3 /\
                                  2 .  4 .

使用列表提供:

代码语言:javascript
运行
复制
(list (list 1 2) (list 3 4)) = (cons (cons 1 (cons 2 empty))
                                     (cons (cons 3 (cons 4 empty))
                                           empty
                             =     /\___
                                 /\     /\
                                1 /\   /\ .
                                  2 .  3/\
                                        4 .

在SICP第108页中,他们假设我们有一棵树表示为树的列表。也就是说:他们认为cons还没有被用来制作树。

他们使用的翻译是:

代码语言:javascript
运行
复制
empty = .

(list a) = |
           a

(list a b) = /\
             a b

(list a b c) =  /|\
                abc

他们的榜样

代码语言:javascript
运行
复制
(list (list 1 2) 3 4)  =   /|\
                          /\3 4   
                          1 2

由于示例中没有空列表,所以我们不使用。在画里。

总之,SICP中的符号不能用于绘制用consempty构建的通用数据结构。

票数 1
EN

Stack Overflow用户

发布于 2016-04-17 08:49:42

当用于构建列表时,(cons x y)创建一个列表,其中x (可以是任何类型)作为它的第一个元素,y (必须是一个列表,结果必须是一个列表)作为它的其余元素。所以(cons 1 (list 3 4))给你(1 3 4)(cons (list 1 2) (list 3 4))给你((1 2) (3 4)),因为(1 2)只是列表的第一个元素。

如果希望结果是((1 2) (3 4)),则编写(list (list 1 2) (list 3 4))而不是使用cons

SICP绘制三元树的原因是它表示树,因此每个列表代表一个节点,其中每个元素都是子节点。因此,包含三个元素(如(1 2 (3 4)))的列表是一个有三个子元素的节点:两个叶和一个子树,两个子树(都是叶)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36673716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档