Erlang синтаксическая ошибка с 'Или' - PullRequest
4 голосов
/ 09 октября 2011

Я получил эту очень новую и простую функцию на эрланге:

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: '=='

Я вытаскиваю одно из выражений из оператора или, и оно работает. Как вы видите, я очень новичок в эрланге и действительно не понимаю, почему это происходит, если это кажется таким простым. Любая помощь? Спасибо

Ответы [ 2 ]

7 голосов
/ 09 октября 2011

В соответствии с приоритетом оператора в Erlang , приоритет or выше, чем ==.Таким образом, ваше выражение как написанное обрабатывается как

LX == (2 or LY) == 2

, что является синтаксической ошибкой.Чтобы исправить это, вы должны использовать круглые скобки вокруг каждого термина:

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

В качестве альтернативы, вы можете использовать orelse, который имеет меньший приоритет, чем ==:

LX == 2 orelse LY == 2.
3 голосов
/ 09 октября 2011

По какой-то причине == и 'или', вероятно, имеют одинаковый приоритет операторов, поэтому вам нужно сообщить компилятору более точно, что именно вы хотите.Вы можете написать «(LX == 2) или (LY == 2)» или использовать «orelse» вместо «или».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...