这是我的代码:
is_prime(Num)->
length(list_of_dividers(Num)) == 0.
problem_7(Current, Primes, Counter) when Primes >= 10001->
Current;
problem_7(Current, Primes, Counter) when is_prime(Counter) ->
problem_7(Counter, Primes + 1, Counter + 1);
problem_7(Current, Primes, Counter) ->
problem_7(Current, Primes, Counter).
我收到错误:
32> c(problem_7).
./problem_7.erl:30: call to local/imported function is_prime/1 is illegal in guard
我不能在'if'表达式中使用局部函数:
if is_prime(Counter)->
problem_7(Counter, Primes + 1, Counter + 1);
true ->
problem_7(Current, Primes, Counter + 1)
end.
我只是想知道是否有任何方法可以在后卫中使用本地函数,如何用本地函数编写条件?
答案 0 :(得分:14)
限制有效表达式集的原因是必须保证对保护表达式的评估没有副作用。 http://www.erlang.org/doc/reference_manual/expressions.html(第7.24节)
在您的函数中使用case
语句。您应该能够在 和if
case
中使用本地函数。
已编辑:同意@cthulahoops,我错误地认为if
http://www.erlang.org/doc/reference_manual/expressions.html#id75927