Programming Erlang Book Club

The exercises for chapter 7 are quite tricky, but finally I finished them :smiley:

Exercise 7
-module(ex7).
-export([reverse_binary/1,term_to_packet/1, packet_to_term/1, test/0, reverse_bits/1]).

% 7.1
reverse_binary(Binary) ->
    reverse_binary(Binary, <<>>).

reverse_binary(<<>>, Binary) ->
    Binary;
reverse_binary(<<Head, Tail/binary>>, Accumulator) ->
    reverse_binary(Tail, <<Head, Accumulator/binary>>).

% 7.2
term_to_packet(Term) ->
    Binary = term_to_binary(Term),
    N = byte_size(Binary),
    <<N:4/unit:8, Binary:N/binary>>.

% 7.3
packet_to_term(Packet) ->
    <<N:4/unit:8, Binary:N/binary>> = Packet,
    binary_to_term(Binary).

% 7.4
test() -> 
    P = term_to_packet("DevTalk"),
    "DevTalk" = packet_to_term(P).

% 7.5
reverse_bits(Binary) ->
    Bitlist = [ X || <<X:1>> <= Binary],
    Reversedlist = lists:reverse(Bitlist),
    << <<X:1>> || X <- Reversedlist >>.   

especially 7.2 took me a while…

2 Likes