2012-06-02 7 views

Odpowiedz

15

If Wyrażenie nie działa w Erlang w taki sam sposób, jak w innych językach programowania.

Według http://www.erlang.org/doc/reference_manual/expressions.html (pkt 7.7): Jeśli

gałęziach If-wypowiedzi są skanowane sekwencyjnie aż sekwencja straż GuardSeq których wartość true znaleziono.

W przykładzie wyrażenie F(X + 2*E) < F(X + E) traktowany jest nie jako normalnej ekspresji, ale jako wyrażenie straży, które mogłyby mieć non-deterministyczne wyniki (Erlang pozwala używać wyrażeń tylko deterministyczne w wyrażeniach straży), więc Erlang odmawia użycia go w wyrażeniu "jeśli".

Aby rozwiązać problem, zaleca się użycie zamiast tego wyrażenia case. Coś takiego:

min1_e_(F, X, E) -> 
      case F(X + 2*E) < F(X + E) of 
        true -> min1_e_(F, X, E*2); 
        false -> E 
      end. 
Powiązane problemy