'Or'的Erlang语法错误

时间:2011-10-08 21:16:21

标签: erlang

我在erlang中得到了这个非常简单的新功能:

function_x(L) ->
    X = lists:filter((fun(N)-> N =:= 2 end), L),
    Y = lists:filter((fun(N)-> N =:= 3 end), L),
    LX = length(X),
    LY = length(Y),
    LX == 2 or LY == 2.

编译源代码,我收到此错误:

syntax error before: '=='

我从或者clausule拉出其中一个表达式并且它有效。正如你所看到的那样,我非常喜欢erlang,如果它看起来如此简单,我真的不明白为什么会这样。有帮助吗?感谢

2 个答案:

答案 0 :(得分:7)

根据operator precedence in Erlangor的优先级高于==的优先级。所以你写的表达式被视为

LX == (2 or LY) == 2

这是一个语法错误。要解决此问题,您必须在每个术语周围使用括号:

(LX == 2) or (LY == 2).

或者,您可以使用低于优先于orelse的{​​{1}}:

==

答案 1 :(得分:3)

由于某种原因,==和'或'可能具有相同的运算符优先级,因此您需要更准确地告诉编译器您想要的是什么。您可以写“(LX == 2)或(LY == 2)”或使用'orelse'代替'或'。