Scheme 如何在方案中正确粘贴括号?

Scheme 如何在方案中正确粘贴括号?,scheme,Scheme,我不明白为什么我这么做: (cons (list 1 2) (list 3 4)) 我明白了 ((1 2) 3 4) , but not a ((1 2) (3 4)) 或 .__4 / \ . 3 / \ 1 2` 这是一棵三元树。左子-具有两片叶子的二叉树。中间和右边的孩子只是一个树叶 我假设我有((12)(34))和二叉树以及两个子树(每个都是它的二叉树) 那么,为什么作者要画一幅三叉树而不是二叉树的图呢?当

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

(cons (list 1 2) (list 3 4))
我明白了

((1 2) 3 4) , but not a ((1 2) (3 4))

         .__4
        / \
       .  3
      / \
     1   2`
这是一棵三元树。左子-具有两片叶子的二叉树。中间和右边的孩子只是一个树叶

我假设我有
((12)(34))
和二叉树以及两个子树(每个都是它的二叉树)


那么,为什么作者要画一幅三叉树而不是二叉树的图呢?

当用于构建列表时,
(cons x y)
创建一个列表,该列表的第一个元素是
x
(可以是任何类型),其余元素是
y
(必须是列表才能成为列表)。所以
(cons1(list34))
给你
(134)
(cons12)(list34))
给你
((12)(34))
,因为
(12)
只是列表的第一个元素

如果您希望结果是
((12)(34))
,您可以编写
(list(list)(list 12)(list 34))
,而不是使用
cons


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

当用于构建列表时,
(cons x y)
创建一个包含
x
(可以是任何类型)作为其第一个元素和
y
所以
(cons1(list34))
给你
(134)
,而
(cons12)(list34))
给你
((12)(34))
,因为
(12)
只是列表的第一个元素

如果您希望结果是
((12)(34))
,您可以编写
(list(list)(list 12)(list 34))
,而不是使用
cons


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

让我们使用以下翻译:

(cons a b)  =   /\           and empty  = .
               a  b
empty = .

(list a) = |
           a

(list a b) = /\
             a b

(list a b c) =  /|\
                abc
首先,我们有两份清单:

(list 1 2) = (cons 1 (cons 2 empty)) =   /\
                                         1 /\
                                           2 .

(list 3 4) = (cons 3 (cons 4 empty)) =   /\
                                         3 /\
                                           4 .
在两个列表中使用
cons
,可得出:

(cons (list 1 2) (list 3 4)) = (cons (cons 1 (cons 2 empty))
                                     (cons 3 (cons 4 empty)))
                             =    / \
                                 /\  /\
                                1 /\ 3 /\
                                  2 .  4 .
使用列表给出:

(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
没有被用于生成树

他们使用翻译:

(cons a b)  =   /\           and empty  = .
               a  b
empty = .

(list a) = |
           a

(list a b) = /\
             a b

(list a b c) =  /|\
                abc
他们的榜样

(list (list 1 2) 3 4)  =   /|\
                          /\3 4   
                          1 2
由于示例中没有空列表,因此在图形中不使用


简而言之:SICP中的符号不能用于绘制使用
cons
empty
构建的一般数据结构让我们使用以下翻译:

(cons a b)  =   /\           and empty  = .
               a  b
empty = .

(list a) = |
           a

(list a b) = /\
             a b

(list a b c) =  /|\
                abc
首先,我们有两份清单:

(list 1 2) = (cons 1 (cons 2 empty)) =   /\
                                         1 /\
                                           2 .

(list 3 4) = (cons 3 (cons 4 empty)) =   /\
                                         3 /\
                                           4 .
在两个列表中使用
cons
,可得出:

(cons (list 1 2) (list 3 4)) = (cons (cons 1 (cons 2 empty))
                                     (cons 3 (cons 4 empty)))
                             =    / \
                                 /\  /\
                                1 /\ 3 /\
                                  2 .  4 .
使用列表给出:

(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
没有被用于生成树

他们使用翻译:

(cons a b)  =   /\           and empty  = .
               a  b
empty = .

(list a) = |
           a

(list a b) = /\
             a b

(list a b c) =  /|\
                abc
他们的榜样

(list (list 1 2) 3 4)  =   /|\
                          /\3 4   
                          1 2
由于示例中没有空列表,因此在图形中不使用


简言之:SICP中的符号不能用于绘制用
cons
empty
构建的一般数据结构。你的问题到底是什么?啊。我认为这个问题是重复的,但为什么SICP作者用三元树而不是二进制树来绘制图片?108页是的,它们是等效的。同样,
((1 2)(3 4))
((1 2)3 4)
是等效的。你在这里创建了前者。如果你想要后者,用
列表替换
cons
。你的问题到底是什么?啊。我认为这个问题是重复的,但为什么SICP作者用三元树而不是二元树绘制图片?108页是的,它们是等效的。同样,
((1 2)。(3 4))
((1 2)3 4)
是等效的。您已在此处创建了前者。如果需要后者,请将
cons
替换为
list