Erlang 0位串模式匹配

时间:2012-06-09 22:22:12

标签: binary erlang pattern-matching bitstring

你如何模式匹配erlang中等于0的位串?换句话说,形式的模式:

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

这是用于定义函数。

由于

2 个答案:

答案 0 :(得分:4)

这是一种解决方法,我希望它有所帮助:

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

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

在Erlang shell中运行它:

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

答案 1 :(得分: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>

乐趣将匹配0中的17位,0中的1位,以及#5中的以下(N长度)中的0,在0中使用3个附加位进行测试,在#6中进行5次以上测试(8总计归零比特)