Permutations: Difference between revisions

→‎{{header|Erlang}}: Get rid of ++ append operation in zipper
(→‎{{header|Erlang}}: Add zipper implementation)
(→‎{{header|Erlang}}: Get rid of ++ append operation in zipper)
Line 906:
 
permute([]) -> [[]];
permute(L) -> permutezipper(L, []).
 
% Use zipper to pick up first element of permutation
permutezipper([], _) -> [];
permutezipper([H|T], R) ->
% place current member in front of all permutations
% of rest of set - both sides of zipper
prepend(H, permute(lists:reverse(R, T))),
% go further% inpass zipper state for continuation
++ permute( T, [H|R]).
 
prepend(_, [], T, R) -> []zipper(T, R); % continue in zipper
prepend(X, [H|T], ZT, ZR) -> [[X|H] | prepend(X, T, ZT, ZR)].
</lang>
 
Anonymous user