如何在方案中正确粘贴括号?
How to correctly paste parenthesis in scheme?
我不明白为什么我这样做:
(cons (list 1 2) (list 3 4))
我明白了
((1 2) 3 4) , but not a ((1 2) (3 4))
或
.__4
/ \
. 3
/ \
1 2`
这是一棵三元树。 Left child - 有两个叶子的二叉树。中右child就是一片树叶
我想我有 ((1 2) (3 4))
和带有两个 child 的二叉树(每个都是二叉树))。
那为什么SICP (page 103)作者画的图是三叉树而不是二叉树呢?
当用于构建列表时,(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画三叉树的原因是它表示树,这样每个列表表示一个节点,其中每个元素都是一个child。因此,一个包含三个元素的列表(例如 (1 2 (3 4))
)是一个具有三个 children 的节点:两个叶子和一个具有两个 children(两个叶子)的子树。
让我们使用这个翻译:
(cons a b) = /\ and empty = .
a b
首先我们有两个列表:
(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
没有被用来制作树。
他们使用翻译:
empty = .
(list a) = |
a
(list a b) = /\
a b
(list a b c) = /|\
abc
他们的榜样
(list (list 1 2) 3 4) = /|\
/ 4
1 2
由于示例中没有空列表,我们不使用 .在图中。
简而言之:SICP中的符号不能用于绘制由cons
和empty
构建的一般数据结构。
我不明白为什么我这样做:
(cons (list 1 2) (list 3 4))
我明白了
((1 2) 3 4) , but not a ((1 2) (3 4))
或
.__4
/ \
. 3
/ \
1 2`
这是一棵三元树。 Left child - 有两个叶子的二叉树。中右child就是一片树叶
我想我有 ((1 2) (3 4))
和带有两个 child 的二叉树(每个都是二叉树))。
那为什么SICP (page 103)作者画的图是三叉树而不是二叉树呢?
当用于构建列表时,(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画三叉树的原因是它表示树,这样每个列表表示一个节点,其中每个元素都是一个child。因此,一个包含三个元素的列表(例如 (1 2 (3 4))
)是一个具有三个 children 的节点:两个叶子和一个具有两个 children(两个叶子)的子树。
让我们使用这个翻译:
(cons a b) = /\ and empty = .
a b
首先我们有两个列表:
(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
没有被用来制作树。
他们使用翻译:
empty = .
(list a) = |
a
(list a b) = /\
a b
(list a b c) = /|\
abc
他们的榜样
(list (list 1 2) 3 4) = /|\
/ 4
1 2
由于示例中没有空列表,我们不使用 .在图中。
简而言之:SICP中的符号不能用于绘制由cons
和empty
构建的一般数据结构。