[erlang-questions] Interleave binaries

Wes James comptekki@REDACTED
Sat Aug 6 06:40:12 CEST 2011


Hi,

On Fri, Aug 5, 2011 at 3:26 PM, Bob Cowdery <bob@REDACTED> wrote:
> Hi
>
> I'm wanting to interleave two binaries.
>
> Bin1 = <<0,1>>,
> Bin2 = <<2,3>>,
> << <<A,B,C,D>> || <<A,B>> <= Bin1, <<C,D>> <= Bin2 >>.
> <<0,1,2,3>>
>
> Bin1 = <<0,1,2,3>>,
> Bin2 = <<4,5,6,7>>,
> << <<A,B,C,D>> || <<A,B>> <= Bin1, <<C,D>> <= Bin2 >>.
> <<0,1,4,5,0,1,6,7,2,3,4,5,2,3,6,7>>
>
> whereas I want:
> <<0,1,4,5,2,3,6,7>>

<snip>

I don't know if this will suffice:

-------------------------------------------------

% interleave module

-module(ilm).

-export([il/2]).

% interleave function

il(<<A1,A2,RestA/binary>>, <<B1,B2,RestB/binary>>) ->
    Rest=il(RestA, RestB),
    <<A1, A2, B1, B2, Rest/binary>>;

il(<<>>, <<>>) -> <<>>.

-----------------------------------------------

Erlang R14B02 (erts-5.8.3) [source] [smp:2:2] [rq:2] [async-threads:0]
[hipe] [kernel-poll:false]

Eshell V5.8.3  (abort with ^G)
1> c(ilm).
{ok,ilm}
2> ilm:il(<<0,1,2,3>>, <<4,5,6,7>>).
<<0,1,4,5,2,3,6,7>>

----------------------------------------------

-wes



More information about the erlang-questions mailing list