基于元组的Erlang模式匹配

基于元组的Erlang模式匹配,erlang,Erlang,如果我写的很简单: [X || X <- [1,2,3,4,5,6,7,8,9,10]]. 如果我写: [{a,b} || {a,b} <- [{1,2},{2,3}]]. [{A,B} || {A,B} <- [{1,2},{2,3}]]. 简单的问题-为什么?生成器{a,b}生成器{a,b}如果我写: [{a,b} || {a,b} <- [{1,2},{2,3}]]. [{A,B} || {A,B} <- [{1,2},{2,3}]]. 如果我写:

如果我写的很简单:

 [X || X <- [1,2,3,4,5,6,7,8,9,10]].
如果我写:

[{a,b} || {a,b} <- [{1,2},{2,3}]].
[{A,B} || {A,B} <- [{1,2},{2,3}]].
简单的问题-为什么?

生成器{a,b}生成器{a,b}如果我写:

[{a,b} || {a,b} <- [{1,2},{2,3}]].
[{A,B} || {A,B} <- [{1,2},{2,3}]].
如果我写:

[{a,b} || {a,b} <- [{1,2},{2,3}]].
[{A,B} || {A,B} <- [{1,2},{2,3}]].

虽然下面的答案是正确的,但我想指出的是,您可能打算执行
[{A,B}|{A,B}符号来自数学,应该以声明方式阅读。在第二种情况下,如果您将生成器读为“对于列表中的所有对{A,B}”很明显,为什么会忽略任何不匹配的元素。除了模式之外,您可以添加更多的条件;例如,[…|{A,B}B]只选择A大于B的对。虽然下面的答案是正确的,但我想指出,您可能打算执行
[{A,B}{A,B}B}符号来自数学,应该以声明的方式读取。在第二种情况下,如果将生成器读取为“对于列表中的所有对{A,B}”,则可以非常清楚地了解为什么忽略任何不匹配的元素。您可以添加除模式之外的其他条件;例如,[…|{A,B}B]仅选择A大于B的对。它只是表示大写表示数字,而小写表示原子“值”?谢谢Alot@Kornelia:几乎,大写表示变量,小写表示原子以及
'Atom with upper case'
。它只是表示大写表示数字,而小写表示Atom'values'?谢谢lot@K奥妮莉亚:几乎,大写表示变量,小写表示原子以及
“带大写字母的原子”
[{1,2},{2,3}]