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
。