Skip to content

Instantly share code, notes, and snippets.

@sanmiguel
Created April 11, 2016 12:45
Show Gist options
  • Save sanmiguel/aafbabd370eed4ab9e2b783a9cb6c6f7 to your computer and use it in GitHub Desktop.
Save sanmiguel/aafbabd370eed4ab9e2b783a9cb6c6f7 to your computer and use it in GitHub Desktop.
-module(mylists).
% interleave X with Y.
interleave(X, Y) -> interleave(X, Y, []).
interleave([], [], A) -> A;
interleave([], T, A) -> lists:reverse(A) ++ T;
interleave(T, [], A) -> lists:reverse(A) ++ T;
interleave([X | XT], [Y | YT], A) -> interleave(XT, YT, [X, Y | A]);
% intersperse X among Ys
intersperse(X, Ys) -> intersperse(X, Ys, []).
intersperse(X, [], A) -> lists:reverse(A);
intersperse(X, [Y], A) -> lists:reverse([ Y, X | A ]);
intersperse(X, [Y | YT], A) -> intersperse(X, YT, [ Y, X | A ]).
prop_interleave_length() ->
?FORALL({X, Y}, {list(any()), list(any())},
length(X) + length(Y) == length(interleave(X, Y))).
prop_intersperse_length() ->
?FORALL({B, Ts}, {any(), list(any())},
length(intersperse(B, Ts)) == (length(Ts) * 2) - 1).
prop_intersperse_start() ->
?FORALL({B, Ts}, {any(), list(any())},
Ts == [] orelse
hd(Ts) == hd(intersperse(B, Ts)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment