История изменений
Исправление loz, (текущая версия) :
В эрланге нет «поиска решений» поэтому нет и бэктрекинга, то есть если в (псевдо)прологе написать
f() ->
foo(X),
bar(X).
У тебя вначале X заматчится на одно из возможных значений в foo
то потом если нет подходящих значений для X в bar
то бэктрекинг пойдет пробовать следующее значение удовлетворяющее foo
.
В эрланге это обычные вызовы функций (в первую очередь оно не скомпилится потому что X не определен) и если bar
«не поддерживает» X как аргумент - просто вывалится ошибка.
В плане паттерн-матчинга это чисто как хаскель:
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
На эрланге будет:
sign(X) when X > 0 -> 1;
sign(X) when X == 0 -> 0;
sign(X) when X < 0 -> -1.
То есть правила применяются по порядку сверху вниз, но так же нет никакого бэктрекинга а падает с ошибкой если не найдено подходящее тело.
Исправление loz, :
В эрланге нет «поиска решений» поэтому нет и бэктрекинга, то есть если в (псевдо)прологе написать
f() ->
foo(X),
bar(X).
У тебя вначале X заматчится на одно из возможных значений в foo
то потом если нет подходящих значений для X в bar
то бэктрекинг пойдет пробовать следующее значение удовлетворяющее foo
.
В эрланге это обычные вызовы функций и если bar
«не поддерживает» X как аргумент - просто вывалится ошибка.
В плане паттерн-матчинга это чисто как хаскель:
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
На эрланге будет:
sign(X) when X > 0 -> 1;
sign(X) when X == 0 -> 0;
sign(X) when X < 0 -> -1.
То есть правила применяются по порядку сверху вниз, но так же нет никакого бэктрекинга а падает с ошибкой если не найдено подходящее тело.
Исходная версия loz, :
В эрланге нет «поиска решений» поэтому нет и бэктрекинга, то есть если в (псевдо)прологе написать
f() ->
foo(X),
bar(X).
У тебя вначале X заматчится на одно из возможных значений в foo
то потом если нет подходящих значений для X в bar
то бэктрекинг пойдет пробовать следующее значение удовлетворяющее foo
.
В эрланге это обычные вызовы функций и если bar
не «поддерживает» X как аргумент - просто вывалится ошибка.
В плане паттерн-матчинга это чисто как хаскель:
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
На эрланге будет:
sign(X) when X > 0 -> 1;
sign(X) when X == 0 -> 0;
sign(X) when X < 0 -> -1.
То есть правила применяются по порядку сверху вниз, но так же нет никакого бэктрекинга а падает с ошибкой если не найдено подходящее тело.