Erlang 在guard中是否有使用本地函数的方法

Erlang 在guard中是否有使用本地函数的方法,erlang,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, Coun

这是我的密码:

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.

我只是想知道是否有任何方法可以在guard中使用局部函数,以及如何使用局部函数编写条件?

限制有效表达式集的原因是必须保证guard表达式的计算没有副作用。(第7.24节)

在函数中使用
case
语句。您应该能够在
if
case
中使用本地函数


编辑:同意@cthulahops,我错了
如果

在case子句中,是的,但是如果子句像警卫一样受到相同的限制。