我在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,如果它看起来如此简单,我真的不明白为什么会这样。有帮助吗?感谢
答案 0 :(得分:7)
根据operator precedence in Erlang,or
的优先级高于==
的优先级。所以你写的表达式被视为
LX == (2 or LY) == 2
这是一个语法错误。要解决此问题,您必须在每个术语周围使用括号:
(LX == 2) or (LY == 2).
或者,您可以使用低于优先于orelse
的{{1}}:
==
答案 1 :(得分:3)
由于某种原因,==和'或'可能具有相同的运算符优先级,因此您需要更准确地告诉编译器您想要的是什么。您可以写“(LX == 2)或(LY == 2)”或使用'orelse'代替'或'。