Erlang 如何列出语法 [ a, b | [c, d] ] 结果为 [ a, b, c, d]
How does Erlang list syntax [ a, b | [c, d] ] result in [ a, b, c, d]
我正在尝试关注:
http://learnyousomeerlang.com/starting-out-for-real
有一节演示了几个等价的列表结构:
The ways Erlang lists can be built are sometimes
confusing to people who are not used to similar constructors. To help
you get familiar with the concept, read all of these examples (hint:
they're all equivalent):
[a, b, c, d]
[a, b, c, d | []]
[a, b | [c, d]] <---- I don't understand this one
[a, b | [c | [d]]]
[a | [b | [c | [d]]]]
[a | [b | [c | [d | [] ]]]]
我不太容易理解的是:
[a, b | [c, d]]
我理解普通的嵌套构造函数语法,它只是一个递归构造的列表。但是 erlang 是如何处理这种非嵌套术语语法的呢?我本来期望评估 b | [c, d]
会导致 [b, c, d]
,这会导致:
[a, [b , c, d]]
当然,我只记得语法的最终结果是什么,但我正在寻找更详细的解释。
构造 | [c,d]
使 [c,d]
成为封闭列表的尾部。在 |
分隔符之前的封闭列表中有多少像 a,b
这样的元素并不重要,因为它们只是该封闭列表的普通元素。换句话说,|
将其左侧的列表元素与其右侧的列表尾分开。
也许您对构造 [Head|Tail]
感到困惑,它通常用于处理列表的头部元素,然后递归地处理尾部元素。在这种情况下,您无法提取语法的 b | [c,d]
部分,将其视为等同于 [Head|Tail]
,然后得出 [a,[b,c,d]]
的答案,因为 b
不是列表的头部。
我正在尝试关注: http://learnyousomeerlang.com/starting-out-for-real
有一节演示了几个等价的列表结构:
The ways Erlang lists can be built are sometimes confusing to people who are not used to similar constructors. To help you get familiar with the concept, read all of these examples (hint: they're all equivalent):
[a, b, c, d]
[a, b, c, d | []]
[a, b | [c, d]] <---- I don't understand this one
[a, b | [c | [d]]]
[a | [b | [c | [d]]]]
[a | [b | [c | [d | [] ]]]]
我不太容易理解的是:
[a, b | [c, d]]
我理解普通的嵌套构造函数语法,它只是一个递归构造的列表。但是 erlang 是如何处理这种非嵌套术语语法的呢?我本来期望评估 b | [c, d]
会导致 [b, c, d]
,这会导致:
[a, [b , c, d]]
当然,我只记得语法的最终结果是什么,但我正在寻找更详细的解释。
构造 | [c,d]
使 [c,d]
成为封闭列表的尾部。在 |
分隔符之前的封闭列表中有多少像 a,b
这样的元素并不重要,因为它们只是该封闭列表的普通元素。换句话说,|
将其左侧的列表元素与其右侧的列表尾分开。
也许您对构造 [Head|Tail]
感到困惑,它通常用于处理列表的头部元素,然后递归地处理尾部元素。在这种情况下,您无法提取语法的 b | [c,d]
部分,将其视为等同于 [Head|Tail]
,然后得出 [a,[b,c,d]]
的答案,因为 b
不是列表的头部。