2012-06-09 36 views
1

如何匹配在erlang中等于0的比特串?换句话说,这种形式的图案:Erlang 0比特串模式匹配

<<0:17>> 
<<0:1>> 
<<0:N>> 

这是为了定义一个函数。

感谢

回答

3

这里是一个解决办法,我希望它能帮助:从Erlang的外壳内

-module(lab). 
-compile(export_all). 

is_zero_bitstring(BitString) -> 
    Size = erlang:bit_size(BitString), 
    <<0:Size>> =:= BitString. 

运行:

1> c(lab). 
{ok,lab} 
2> lab:is_zero_bitstring(<<0:17>>). 
true 
3> lab:is_zero_bitstring(<<0:1>>). 
true 
4> lab:is_zero_bitstring(<<0:123456>>). 
true 
5> lab:is_zero_bitstring(<<7>>). 
false 
0

难道这是你想要的吗?

1> A = <<0:17>>. 
<<0,0,0:1>> 
2> B = <<0:1>>. 
<<0:1>> 
3> C = <<0:3>>. 
<<0:3>> 
4> F = fun(<<0:17, 0:1, Rest/bitstring>>) -> ok end. 
#Fun<erl_eval.6.82930912> 
5> F(<<A/bitstring, B/bitstring, C/bitstring>>). 
ok 
6> F(<<A/bitstring, B/bitstring, C/bitstring, 0:5>>). 
ok 
7> 

乐趣将在#5匹配0 0中17位,在0 1位,和以下(N长度),将其与另外的3个比特在0测试,并在#6用5个以上(总共8个清零位)