(* Programmieraufgabe P-41 (permutiere.ml) *) (* Leonhard Fellermayr *) (* Mat.Nr. 22128130XXXX *) (* =================================================================== Leicht abgewandelte Funktionen aus P-37 (teilliste.ml) =================================================================== *) let rec erste_m_elemente list m = match (list,m) with (_,0) -> [] | ([],_) -> [] (* Liste zu kurz *) | (h::t,_) -> h :: erste_m_elemente t (m-1);; let rec restliste_ab_pos list n = match (list,n) with ([],_) -> [] (* Liste zu kurz *) | (l,0) -> l | (h::t,_) -> restliste_ab_pos t (n-1);; (* =================================================================== einfuegen_an_pos : FŸge das Element ele an Position pos in die Liste list ein und gib die neue Liste anschlie§end zurŸck. =================================================================== *) let einfuegen_an_pos ele list pos = (erste_m_elemente list pos) @ [ele] @ (restliste_ab_pos list pos);; (* =================================================================== list_length : LŠnge einer Liste ermitteln (ZŠhlung ab 0) =================================================================== *) let rec list_length list = match list with (x::xs) -> 1 + (list_length xs) | [] -> 0;; (* =================================================================== do_permutations : EinfŸgen des Elements ele an Position n in die Liste und anschlie§end rek. Aufruf (n von 0 bis list_length list) =================================================================== *) let rec do_permutations ele list n = if (n <= list_length list) then [einfuegen_an_pos ele list n] @ (do_permutations ele list (n+1)) else [];; (* =================================================================== einfuegen =================================================================== *) let einfuegen ele list = do_permutations ele list 0;; (* =================================================================== listen_einfuegen =================================================================== *) let rec listen_einfuegen ele llist = match llist with (x::xs) -> (einfuegen ele x) @ listen_einfuegen ele xs | [] -> [];; (* =================================================================== permutiere =================================================================== *) let rec permutiere_rec liste cl = match liste with (x::xs) -> permutiere_rec xs (listen_einfuegen x cl) | [] -> cl;; let permutiere l = permutiere_rec l [[]];; (* EOF *)