Permutations: Difference between revisions
→{{header|JavaScript}}: ES5 and ES6 functional versions updated (latter moved to correct heading)
(→JS ES6: ( updated primitives )) |
(→{{header|JavaScript}}: ES5 and ES6 functional versions updated (latter moved to correct heading)) |
||
Line 2,522:
(Simple version – assuming a unique list of objects comparable by the JS === operator)
'use strict';▼
return xs.length ? concatMap(function (x) {
return concatMap(function (ys) {
};
// GENERIC FUNCTIONS
// concatMap :: (a -> [b]) -> [a] -> [b]
var concatMap = function (f, xs) {
};
// delete :: Eq a => a -> [a] -> [a]
var delete_ = function (x, xs) {
return deleteBy(function (a, b) {
};
// deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
var deleteBy = function (f, x, xs) {
[xs[0]].concat(deleteBy(f, x, xs.slice(1))) : [];
};
// TEST
})();</lang>
{{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>(() => {
Line 2,534 ⟶ 2,578:
[]
];
// GENERIC FUNCTIONS
Line 2,556 ⟶ 2,599:
return permutations(['Aardvarks', 'eat', 'ants']);
})();</lang>
▲{{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) {
▲ 'use strict';
▲ const permutations = (xs) => xs.length ? (
▲ flatMap((x) => flatMap((xs) => [[x].concat(xs)],
▲ permutations(del(x, xs))), xs)
▲ ) : [[]],
▲ flatMap = (f, xs) => [].concat.apply([], xs.map(f)),
▲ xs.slice(1)
▲ ) : [xs[0]].concat(del(x, xs.slice(1))
▲ ) : [];
▲ return permutations(lst);
▲})(["Aardvarks", "eat", "ants"]);</lang>
|