为什么是非法的?
min1_e_( F, X, E) ->
if
F( X + 2*E ) < F( X + E ) -> % ?
min1_e_( F, X, E*2 );
true ->
E
end.
我的意思是,如果我分别定义表达式的两个部分,它工作正常。 但对比函数返回的应该是微不足道的,不应该吗? 我想我想的东西更多的下面。
为什么是非法的?
min1_e_( F, X, E) ->
if
F( X + 2*E ) < F( X + E ) -> % ?
min1_e_( F, X, E*2 );
true ->
E
end.
我的意思是,如果我分别定义表达式的两个部分,它工作正常。 但对比函数返回的应该是微不足道的,不应该吗? 我想我想的东西更多的下面。
If
表达不二郎以同样的方式在其他编程语言。
据http://www.erlang.org/doc/reference_manual/expressions.html (第7.7段如果):
如果一个表达式的分支被依次扫描,直到其计算结果为真保护序列 GuardSeq被发现。
在实施例中,表达F( X + 2*E ) < F( X + E )
进行处理而不是作为一个正常表达,而且作为保护的表达,这可能具有非确定性的结果(二郎允许仅使用确定性的表达式在保护表达式),所以二郎拒绝在“如果”表达式中使用它。
要解决这个问题,我会建议使用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.