2014-06-17 50 views
4

伙伴计算器,爱尔兰多个卫兵在`时'

我目前正在学习Erlang。 有人可以指点我为什么我得到一个illegal guard expression与这个警卫?

add_new_prime(Idx, Primes, Ref) when length(Primes) =:= 0 ; math:sqrt(Idx) < hd(Primes) -> Ref ++ [Idx];

如果我 “未优化” 它这样做只是add_new_prime(Idx, Primes, Ref) when length(Primes) =:= 0 -> Ref ++ [Idx];

它的工作原理。我已经看到了多个例子,每个子句有多个“声明”,但不知道为什么我的工作不正常。

非常感谢!

回答

7

请参阅:

的一组有效的保护表达式(有时称为守护测试)的是一套有效的Erlang表达式的 子集。 限制一组有效表达式的原因是必须保证对表达式的评估没有副作用。有效后卫 表达式是:

原子真实的,其他常量(条款和约束变量),所有 视为假,调用下面指定的内建函数,长期 比较,算术表达式,布尔表达式,并 短期电路表达式(andalso/orelse)。

在你的情况下,math:sqrt(Idx)不是有效的警戒表达式。

在这里阅读的文档:http://www.erlang.org/doc/reference_manual/expressions.html#id81357

相关问题