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)