有没有办法在守卫中使用本地功能

dem*_*mas 10 erlang

这是我的代码:

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).
Run Code Online (Sandbox Code Playgroud)

我收到错误:

32> c(problem_7).
./problem_7.erl:30: call to local/imported function is_prime/1 is illegal in guard
Run Code Online (Sandbox Code Playgroud)

我不能在'if'表达式中使用局部函数:

if is_prime(Counter)->
    problem_7(Counter, Primes + 1, Counter + 1);
   true ->
    problem_7(Current, Primes, Counter + 1)
end.
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有任何方法在守卫中使用本地功能,如何用本地函数写条件?

Vic*_*roz 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

  • 在案件条款中,是的,但是如果条款像警卫并受到相同的限制. (3认同)