2009-04-18 4 views
3

내가 얼랑에 비트 패턴 매칭을 실험하고 있습니다 :함수 인수에 동적 비트 패턴이없는 이유는 무엇입니까?

-module(test). 
-export([test/2]). 

%test(P,<<X:P,0:1>>) -> 
% X. 

test(P,X) -> 
    <<Y:P,0:1>> = X, 
    Y. 

test/2의 주석 버전을 컴파일 난 '변수'P는 '언 바운드있다 "고 불만을 얻을. 첫 번째 버전이 두 번째 버전과 똑같이 작동하지 못하게하는 데는 충분한 이유가 있습니까? 때문에 주석 버전 P의

답변

4

길이 - 그것은 얼랑 더블 경기를 수행 할 필요가 작동하려면 - 미정 인 패턴으로 2 매개 변수의 값과 일치를 ...

질문 당신은 절의 패턴 매치를 요구하고 있습니다. "이 절은 나를위한 절인가?"- 당신은 절에 빠져 나올 수없고, 그렇지 않다면 되돌아 갈 수 없습니다 ...

두 번째 예제에서 X는 다음과 같습니다. 경기 전에 바운드, 당신은 조항에 들어가기 위해 최선을 다하고 있다면 <<Y:P,0:1>> don't match X, 잘 충돌 시간!

0

그 이유는 함수에 대한 인수가 서로 독립적으로 평가되기 때문입니다. 변수에 대한 바인딩의 정확성은 두 번째 단계로만 확인됩니다.

이것은 첫 번째 예에서 패턴 일치 규칙에 위배되는 두 번째 인수를 평가할 때 P가 언 바운드됨을 의미합니다. 반대로, 두 번째 예에서 P는 바이너리에서 패턴 일치를 평가할 때 바인딩됩니다.

관련 문제