'Or'的Erlang sytax错误

Che*_*uis 4 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.
Run Code Online (Sandbox Code Playgroud)

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

syntax error before: '=='
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*ill 7

根据Erlang中运算符优先级,优先级or高于==.所以你写的表达式被视为

LX == (2 or LY) == 2
Run Code Online (Sandbox Code Playgroud)

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

(LX == 2) or (LY == 2).
Run Code Online (Sandbox Code Playgroud)

另外,您也可以使用orelse具有较低的优先级比==:

LX == 2 orelse LY == 2.
Run Code Online (Sandbox Code Playgroud)