RosettaCodeData/Task/Permutations/Qi/permutations.qi

20 lines
522 B
Plaintext

(define insert
L 0 E -> [E|L]
[L|Ls] N E -> [L|(insert Ls (- N 1) E)])
(define seq
Start Start -> [Start]
Start End -> [Start|(seq (+ Start 1) End)])
(define append-lists
[] -> []
[A|B] -> (append A (append-lists B)))
(define permutate
[] -> [[]]
[H|T] -> (append-lists (map (/. P
(map (/. N
(insert P N H))
(seq 0 (length P))))
(permute T))))