Permutations: Difference between revisions

m (→‎using numbers: added whitespace to the REXX section header.)
Line 2,301:
</script></body></html></lang>
 
===Functional (ES5)===
 
 
====ES5====
 
{{trans|Haskell}}
Line 2,349 ⟶ 2,352:
{{out}}
 
<lang JavaScript>[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"],
["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"],
["ants", "Aardvarks", "eat"], ["ants", "eat", "Aardvarks"]]</lang>
 
 
====ES6====
 
<lang JavaScript>(function (lst) {
 
// [a] -> [[a]]
let permutations = (xs) =>
xs.length ? (concatMap(
x => concatMap(
ys => [[x].concat(ys)],
permutations(
delete1(x, xs)
)
), xs)) : [[]],
 
 
// GENERIC LIBRARY FUNCTIONS
 
// concatMap :: (a -> [b]) -> [a] -> [b]
concatMap = (f, xs) => [].concat.apply([], xs.map(f)),
 
// delete first instance of a in [a]
// delete1 :: a -> [a] -> [a]
delete1 = (x, xs) =>
deleteBy((a, b) => a === b, x, xs),
 
 
// deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy = (fnEq, x, xs) =>
xs.length ? fnEq(x, xs[0]) ? xs.slice(1) : [xs[0]]
.concat(deleteBy(fnEq, x, xs.slice(1))) : [];
 
 
return permutations(lst);
 
})(['Aardvarks', 'eat', 'ants']);</lang>
 
 
{{Out}}
<lang JavaScript>[["Aardvarks", "eat", "ants"], ["Aardvarks", "ants", "eat"],
["eat", "Aardvarks", "ants"], ["eat", "ants", "Aardvarks"],
9,655

edits