2014-06-17 1 views
4

Fellow stackoverflow-ers,'when`에 Erlang multiple guard가 있습니다.

현재 Erlang을 배우고 있습니다. 누군가가 나를 가리켜 주면 왜이 가드에 illegal guard expression이 표시됩니까?

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

수행하여 I "유엔 - 최적화"그것은 단지 add_new_prime(Idx, Primes, Ref) when length(Primes) =:= 0 -> Ref ++ [Idx];

작동합니다. 나는 절 하나당 하나 이상의 '진술'이 있지만 어디에서 광산이 작동하지 않는지를 볼 수없는 여러 예제를 보았습니다.

고맙습니다.

답변

7

참조하십시오

유효 가드 식 (라고도 가드 테스트)의 설정이 유효 얼랑 식의 세트의 하위 집합입니다. 이 유효한 표현식 세트를 제한하는 이유는 보호 장치 표현의 평가가 부작용이 없음을 보장해야하기 때문입니다. 유효 가드 표현은 다음과 같습니다

사실 원자, 다른 상수 (용어와 결합 변수), 거짓으로 간주 모든 , 아래의 지정된 BIFS, 용어 비교, 산술 식, 부울 식으로 호출하고 단기 회로 표현 (andalso/orelse).

math:sqrt(Idx)은 (는) 유효한 가드 표현식이 아닙니다.

여기에 문서 읽기 : http://www.erlang.org/doc/reference_manual/expressions.html#id81357 또한