2012-06-02 2 views

답변

15

If 다른 프로그래밍 언어에서와 같은 방식으로 Erlang에서 표현식이 작동하지 않습니다. http://www.erlang.org/doc/reference_manual/expressions.html (7.7 항의 경우)에 기재된

: 참으로 평가하는 가드 계열 GuardSeq가 발견 될 때까지 IF-발현

분기 순차적으로 스캐닝된다. 당신의 예에서

은 얼랑 때문에, 표현 F(X + 2*E) < F(X + E)가 아닌 일반 식으로 취급되지만, 비 결정적 결과가있을 수 있습니다 가드 식으로 (얼랑 가드 표현 만 결정적 식을 사용할 수 있습니다) "if"표현식에서 그것을 사용하는 것을 거부합니다.

문제를 해결하려면 대신 case 표현을 사용하는 것이 좋습니다. 다음과 같은 내용 :

min1_e_(F, X, E) -> 
      case F(X + 2*E) < F(X + E) of 
        true -> min1_e_(F, X, E*2); 
        false -> E 
      end. 
관련 문제