Permutations: Difference between revisions
Content deleted Content added
→{{header|Erlang}}: List comprehension form |
|||
Line 900:
F = fun(L) -> G = fun(_, []) -> [[]]; (F, L) -> [[X|Y] || X<-L, Y<-F(F, L--X)] end, G(G, L) end.
</lang>
<lang Erlang>-module(permute).
-export([permute/1]).
permute(L) -> permute(L, []).
% Use zipper to pick up first element of permutation
permute([], _) -> [];
permute([H|T], R) ->
% place current member in front of all permutation of
% all permutations of rest of set - both sides of zipper
prepend(H, permute(lists:reverse(R, T)))
% go further in zipper
prepend(_, []) -> [];
▲permute( [H|T] ) ->
▲ permute( T ))).
</lang>
|