Permutations: Difference between revisions
Content added Content deleted
(Added a non-library implementation for haskell) |
(Add Seed7 example) |
||
Line 1,812: | Line 1,812: | ||
List('c, 'a, 'b) |
List('c, 'a, 'b) |
||
List('c, 'b, 'a)</pre> |
List('c, 'b, 'a)</pre> |
||
=={{header|Scheme}}== |
=={{header|Scheme}}== |
||
<lang scheme>; translation of ocaml : mostly iterative, with auxiliary recursive functions for some loops |
<lang scheme>; translation of ocaml : mostly iterative, with auxiliary recursive functions for some loops |
||
Line 1,874: | Line 1,875: | ||
; 2 0 1 |
; 2 0 1 |
||
; 2 1 0</lang> |
; 2 1 0</lang> |
||
=={{header|Seed7}}== |
|||
<lang seed7>$ include "seed7_05.s7i"; |
|||
const type: permutations is array array integer; |
|||
const func permutations: permutations (in array integer: items) is func |
|||
result |
|||
var permutations: permsList is 0 times 0 times 0; |
|||
local |
|||
const proc: perms (in array integer: sequence, in array integer: prefix) is func |
|||
local |
|||
var integer: element is 0; |
|||
var integer: index is 0; |
|||
begin |
|||
if length(sequence) <> 0 then |
|||
for element key index range sequence do |
|||
perms(sequence[.. pred(index)] & sequence[succ(index) ..], prefix & [] (element)); |
|||
end for; |
|||
else |
|||
permsList &:= prefix; |
|||
end if; |
|||
end func; |
|||
begin |
|||
perms(items, 0 times 0); |
|||
end func; |
|||
const proc: main is func |
|||
local |
|||
var array integer: perm is 0 times 0; |
|||
var integer: element is 0; |
|||
begin |
|||
for perm range permutations([] (1, 2, 3)) do |
|||
for element range perm do |
|||
write(element <& " "); |
|||
end for; |
|||
writeln; |
|||
end for; |
|||
end func;</lang> |
|||
Output: |
|||
<pre> |
|||
1 2 3 |
|||
1 3 2 |
|||
2 1 3 |
|||
2 3 1 |
|||
3 1 2 |
|||
3 2 1 |
|||
</pre> |
|||
=={{header|Smalltalk}}== |
=={{header|Smalltalk}}== |