2012-06-02 26 views

Respuesta

15

If expresión no funciona en Erlang de la misma forma que en otros lenguajes de programación.

Según http://www.erlang.org/doc/reference_manual/expressions.html (párrafo 7.7 If):

las ramas de un-expresión si se escanean secuencialmente hasta que se encuentra un GuardSeq secuencia de guardia que se evalúa como verdadera.

En su ejemplo, la expresión F(X + 2*E) < F(X + E) se trata no como una expresión normal, sino como una expresión de guardia, lo que podría tener resultados no deterministas (Erlang permite utilizar expresiones única deterministas en las expresiones de guardia), por lo Erlang se niega a usarlo en la expresión "si".

Para resolver el problema, recomendaría utilizar una expresión case en su lugar. Algo como esto:

min1_e_(F, X, E) -> 
      case F(X + 2*E) < F(X + E) of 
        true -> min1_e_(F, X, E*2); 
        false -> E 
      end. 
Cuestiones relacionadas