Erlang-为什么这两个表达式不匹配?

Erlang-为什么这两个表达式不匹配?,erlang,Erlang,我有这样一个案例陈述: case {[{atom1,A1},{atom2,A2}],false} of {[{A,B},{C,D}], false} -> {A,B} end. 还有其他案例,但我把它们删掉了 我不明白为什么会出现以下错误: **异常错误:没有匹配{[{atom1,A1},{atom2,A2}],false}的case子句 在函数表达式中:myFunct/1 myModule.erl,第391行 为什么{[{ato

我有这样一个案例陈述:

case {[{atom1,A1},{atom2,A2}],false} of

                {[{A,B},{C,D}], false} -> {A,B}
            end.
还有其他案例,但我把它们删掉了

我不明白为什么会出现以下错误:

**异常错误:没有匹配{[{atom1,A1},{atom2,A2}],false}的case子句 在函数表达式中:myFunct/1 myModule.erl,第391行


为什么{[{atom1,A1},{atom2,A2},{false}不等于{[{A,B},{C,D},{false}?

它是相等的。除非变量A或C已经绑定到某个值。

它是相等的。除非变量A或C已经绑定到某个值。

它确实绑定到某个值。如果A、B、C或D中至少有一个绑定值与不匹配,则问题可能是您的周围代码

$ erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> A1 = foo, A2 = bar.
bar
2> case {[{atom1,A1},{atom2,A2}],false} of
2> 
2>                 {[{A,B},{C,D}], false} -> {A,B}
2>             end.
{atom1,foo}

是的。如果A、B、C或D中至少有一个绑定值与不匹配,则问题可能是您的周围代码

$ erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> A1 = foo, A2 = bar.
bar
2> case {[{atom1,A1},{atom2,A2}],false} of
2> 
2>                 {[{A,B},{C,D}], false} -> {A,B}
2>             end.
{atom1,foo}
当case子句模式匹配时,可能A、B、C、D中的任何一个或所有这些都已绑定到某个值,这与匹配所需的值不同

要使其匹配,必须在模式匹配发生时满足以下条件:

A必须是未绑定的,否则它必须包含值atom1 B必须是未绑定的,否则它必须包含与A1相同的值 C必须是未绑定的,否则它必须包含值atom2 D必须是未绑定的,否则它必须包含与A2相同的值 当case子句模式匹配时,可能A、B、C、D中的任何一个或所有这些都已绑定到某个值,这与匹配所需的值不同

要使其匹配,必须在模式匹配发生时满足以下条件:

A必须是未绑定的,否则它必须包含值atom1 B必须是未绑定的,否则它必须包含与A1相同的值 C必须是未绑定的,否则它必须包含值atom2 D必须是未绑定的,否则它必须包含与A2相同的值