Permutations: Difference between revisions
Content added Content deleted
(Add Seed7 example) |
(→{{header|Scheme}}: Add a much better version, translated from erlang) |
||
Line 1,814: | Line 1,814: | ||
=={{header|Scheme}}== |
=={{header|Scheme}}== |
||
{{trans|Erlang}} |
|||
<lang scheme> |
|||
(define (insert l n e) |
|||
(if (= 0 n) |
|||
(cons e l) |
|||
(cons (car l) |
|||
(insert (cdr l) (- n 1) e)))) |
|||
(define (seq start end) |
|||
(if (= start end) |
|||
(list end) |
|||
(cons start (seq (+ start 1) end)))) |
|||
(define (permute l) |
|||
(if (null? l) |
|||
'(()) |
|||
(apply append (map (lambda (p) |
|||
(map (lambda (n) |
|||
(insert p n (car l))) |
|||
(seq 0 (length p)))) |
|||
(permute (cdr l)))))) |
|||
</lang> |
|||
{{trans|OCaml}} |
|||
<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 |
||
(define (vector-swap! v i j) |
(define (vector-swap! v i j) |