2012-06-09 39 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個清零位)