Всем привет.
Собственно не пойму, что происходит (erlang shell):
F = fun(X) when (X == 0) orelse (X / 0 > 2) -> true; (_) -> false end.
F(0).
true
вроде нормально, short circuit работает. То же самое, если заменить orelse на ';':
f().
F = fun(X) when (X == 0) ; (X / 0 > 2) -> true; (_) -> false end.
F(0).
true
Получается, что orelse и ';' есть одно и то же. Ладно, теперь попробуем or, который вроде как не short circuit:
f().
F = fun(X) when (X == 0) or (X / 0 > 2) -> true; (_) -> false end.
F(0).
false
Неожиданно. А где ошибка, почему false? То же самое с andalso/,/and.
Объясните плиз, кто понимает, что здесь происходит, зачем столько синонимов (andalso и ',', orelse и ';') и почему нету никакой ошибки с or?