【问题标题】:Erlang 0 bitstring pattern matchingErlang 0 位串模式匹配
【发布时间】:2012-06-13 11:11:38
【问题描述】:

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

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

这是为了定义一个函数。

谢谢

【问题讨论】:

    标签: binary erlang pattern-matching bitstring


    【解决方案1】:

    这是一个解决方法,希望对您有所帮助:

    -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
    

    【讨论】:

      【解决方案2】:

      这可能是你想要的吗?

      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总共零位)

      【讨论】:

        猜你喜欢
        • 2011-08-14
        • 2014-06-27
        • 2015-09-16
        • 2018-12-08
        • 2011-06-17
        • 2013-08-15
        • 2011-09-29
        • 2010-12-13
        • 2014-07-26
        相关资源
        最近更新 更多