2014-06-17 71 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

相關問題