Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Queue : QUEUE_FUN =
- struct (* implementuje sygnaturę *)
- type 'a t = 'a list * 'a list (* polecenie mówiło o parzę list *)
- exception Empty of string (* Wyjątek - Empty *)
- let empty() = ([],[]) (* pusta kolejka*)
- let enqueue(e,q) = (*dodaje e do kolejki q - FIFO *)
- match q with
- | ([],ys) -> (List.rev (e::ys), []) (* pusty początek (pierwsza lista), dodaje na koniec i obracam *)
- | (xs,ys) -> (xs, e::ys) (* dodaje na koniec (początek drugiej listy *)
- let dequeue(q) = (* zdjemuje element q z początku kolejki*)
- match q with
- | (_::[], ys) -> (List.rev ys, []) (*w pierwszej liście jest tylko jeden element, zdejmuje i obracam (druga lista jest w odwrotnej kolejnosci) *)
- | (_::tl, ys) -> (tl, ys) (* zdejmuje po prostu pierwszy element*)
- | ([], _) -> empty() (* pierwsza lista pusta, zwracam pustą listę *)
- let first q = (* pobieram pierwszy element z kolejki q *)
- match q with
- | (hd::_,_) -> hd (* odczytuje pierwszy element *)
- | ([],_) -> raise (Empty "module Queue: first") (* wyjatek czyli w Ocamlu konstruktor *)
- let isEmpty q = let (xs,ys) = q in xs = [] && ys = [] (* kolejka q pusta jesli obie lity puste *)
- end;;
Advertisement
Add Comment
Please, Sign In to add comment