(* * Konzepte höherer Programmiersprachen (SS 2006) * * Übungsblatt 10 / Aufgabe 4 *) type stack = {push: int -> unit; pop: unit -> unit; top: unit -> int};; (* Aufgabe 4a *) let single_stack = let s = ref [] in {push = (fun x -> s := x :: !s); pop = (fun u -> s := List.tl !s); top = (fun u -> List.hd !s)};; single_stack.push 1;; single_stack.push 2;; single_stack.pop ();; single_stack.top ();; (* Aufgabe 4b *) let make_stack = fun u -> let s = ref [] in {push = (fun x -> s := x :: !s); pop = (fun u -> s := List.tl !s); top = (fun u -> List.hd !s)};; let fst_stack = make_stack ();; let snd_stack = make_stack ();; fst_stack.push 7;; snd_stack.push 8;; fst_stack.top ();;