let rec einfuegen x = function [] -> [[x]] | h::t -> (x::h::t) :: (List.map (fun y -> h::y) (einfuegen x t)) ;; let rec listen_einfuegen x = function [] -> [] | h::t -> (einfuegen x h) @ (listen_einfuegen x t) ;; let rec permutiere = function [] -> [[]] | h::t -> let p = permutiere t in listen_einfuegen h p ;;