Permutations by swapping: Difference between revisions

m (→‎Alternative Iterative version: Fix comment: Perl 6 --> Raku)
(→‎{{header|F_Sharp|F#}}: Nicer interface)
Line 914:
let ni = [|for n in N -> 0|]
let gel = Array.length(N)-1
yield Some N
let rec _Ni g e l = seq{
match (l,g) with
|_ when l<0 -> gn.[g] <- -gn.[g]; yield! _Ni (g-1) e (ni.[g-1] + gn.[g-1])
|(1,0) -> yield None()
|_ when l=g+1 -> gn.[g] <- -gn.[g]; yield! _Ni (g-1) (e+1) (ni.[g-1] + gn.[g-1])
|_ -> let n = N.[g-ni.[g]+e];
N.[g-ni.[g]+e] <- N.[g-l+e]; N.[g-l+e] <- n; yield Some N
ni.[g] <- l; yield! _Ni gel 0 (ni.[gel] + gn.[gel])}
yield! _Ni gel 0 1
Line 932:
{{out}}
<pre>
Some [|1; 2; 3; 4|]
Some [|1; 2; 4; 3|]
Some [|1; 4; 2; 3|]
Some [|4; 1; 2; 3|]
Some [|4; 1; 3; 2|]
Some [|1; 4; 3; 2|]
Some [|1; 3; 4; 2|]
Some [|1; 3; 2; 4|]
Some [|3; 1; 2; 4|]
Some [|3; 1; 4; 2|]
Some [|3; 4; 1; 2|]
Some [|4; 3; 1; 2|]
Some [|4; 3; 2; 1|]
Some [|3; 4; 2; 1|]
Some [|3; 2; 4; 1|]
Some [|3; 2; 1; 4|]
Some [|2; 3; 1; 4|]
Some [|2; 3; 4; 1|]
Some [|2; 4; 3; 1|]
Some [|4; 2; 3; 1|]
Some [|4; 2; 1; 3|]
Some [|2; 4; 1; 3|]
Some [|2; 1; 4; 3|]
Some [|2; 1; 3; 4|]
v<null/pre>
</pre>
 
=={{header|Forth}}==
2,171

edits