LINUX.ORG.RU

История изменений

Исправление 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.

То есть правила применяются по порядку сверху вниз, но так же нет никакого бэктрекинга а падает с ошибкой если не найдено подходящее тело.