【发布时间】:2012-06-13 11:11:38
【问题描述】:
你如何在 erlang 中匹配一个等于 0 的位串?换句话说,形式的模式:
<<0:17>>
<<0:1>>
<<0:N>>
这是为了定义一个函数。
谢谢
【问题讨论】:
标签: binary erlang pattern-matching bitstring
你如何在 erlang 中匹配一个等于 0 的位串?换句话说,形式的模式:
<<0:17>>
<<0:1>>
<<0:N>>
这是为了定义一个函数。
谢谢
【问题讨论】:
标签: binary erlang pattern-matching bitstring
这是一个解决方法,希望对您有所帮助:
-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> 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>
fun 将匹配 0 中的 17 位,0 中的 1 位,以及 0 中的以下(N 长度)。在 #5 中,它用 0 中的 3 个附加位进行测试,在 #6 中还有 5 个(8总共零位)
【讨论】: