2009-04-18 67 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’是绑定”。 有没有任何理由不允许第一个版本与第二个版本一样工作?

回答

4

因为在注释掉版本P是一个长度 - 为它工作二郎需要执行两个赛 - 匹配是不确定的模式的第二个参数的值...

问题你问中的条文模式匹配是“这是我的条款” - 你不能“随便走进条款”,然后再出来,如果它不是...

在第二个例子中X为在比赛结束前,你承诺要进入该条款,如果碰撞时间太快!

0

的原因是,函数的自变量进行评估相互独立的。第二步检查绑定变量的正确性。

这意味着,在第一个实施例P将评估第二参数,它是对模式匹配的规则时是未结合的。相比之下,在第二个例子中,在评估二进制模式匹配时,P是绑定的。

相关问题