Why is it illegal?
min1_e_( F, X, E) ->
if
F( X + 2*E ) < F( X + E ) -> % ?
min1_e_( F, X, E*2 );
true ->
E
end.
I mean, if I define both parts of expression separately, it works fine. But comparing function returns should be trivial, shouldn't it? Think I'm missing something more beneath that.
If
expression does not work in Erlang in the same way as in other programming languages.According to http://www.erlang.org/doc/reference_manual/expressions.html (paragraph 7.7 If):
In your example, the expression
F( X + 2*E ) < F( X + E )
is treated not as a normal expression, but as a guard expression, which might have non-deterministic results (Erlang allows to use only deterministic expressions in the guard expressions), so Erlang refuses to use it in the "if" expression.To resolve the issue, I would recommend to use a
case
expression instead. Something like this: