(* Programmieraufgabe P-39 (listen.ml) *) (* Leonhard Fellermayr *) (* Mat.Nr. 22128130XXXX *) (* ****************************** minmax ****************************** *) (* Deklaration einer Exception vom Typ string *) exception MyStrException of string;; (* PrŠdikatenfilter fŸr minmax *) let rec pfilter p l = match l with (x::y::xs) -> if p x y then pfilter p (x::xs) else pfilter p (y::xs) | x::[] -> x | [] -> raise (MyStrException "something weird happened...");; let minmax l = match l with [] -> raise (MyStrException "minmax akzeptiert keine leeren Listen!") |_ -> ((pfilter (fun a b -> a < b) l), (pfilter (fun a b -> a >= b) l));; (* ****************************** summanden ****************************** *) (* suche_summanden : Rek. Hilfsfunktion mit Startwert s fŸr n1 *) (* Abbruchsbedingung: s == Abgerundete ganzzahlige HŠlfte von n *) let rec suche_summanden n s = if s <= n/2 then [(s,n-s)]@(suche_summanden n (s+1)) else [];; (* summanden : Benutzer-Funktion *) let summanden n = suche_summanden n 0;; (* ****************************** faktoren ****************************** *) (* suche_faktoren : Rek. Hilfsfunktion mit Startwert s fŸr n1 *) (* Abbruchsbedingung: s == Abgerundete Quadratwurzel von n *) let rec suche_faktoren n s = if s <= truncate (floor (sqrt (float_of_int n))) then if (n mod s = 0) then [(s,n/s)]@(suche_faktoren n (s+1)) else suche_faktoren n (s+1) else [];; (* faktoren : Benutzer-Funktion *) (* Beginne mit 2, da die Aufgabenstellung 1 < n1 <= n2 fordert *) (* D. h. also fŸr Primzahlen: leere Liste! *) let faktoren n = suche_faktoren n 2;; (* EOF *)