Permutations: Difference between revisions

Line 2,069:
 
=={{header|JavaScript}}==
 
===Imperative===
 
Copy the following as an HTML file and load in a browser.
<lang javascript><html><head><title>Permutations</title></head>
Line 2,093 ⟶ 2,096:
perm([1, 2, 'A', 4], []);
</script></body></html></lang>
 
===Functional (ES5)===
 
{{trans|Haskell}}
 
(Simple version – assuming a unique list of objects comparable by the JS === operator)
 
<lang JavaScript>(function () {
 
// monadic bind/chain for lists
function chain(xs, f) {
return [].concat.apply([], xs.map(f));
}
// monadic return/inject for lists
function inject(x) {
return [x];
}
// drops first instance found
function deleted(x, xs) {
return xs.length ? (
x === xs[0] ? xs.slice(1) : [xs[0]].concat(
deleted(x, xs.slice(1))
)
) : [];
}
 
function permutations(xs) {
return xs.length ? (
chain(xs, function (x) {
return chain(permutations(deleted(x, xs)), function (ys) {
return inject([x].concat(ys));
})
})
) : [[]]
}
 
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>
 
=={{header|jq}}==
"permutations" generates a stream of the permutations of the input array.
9,659

edits