radko93

7.1b

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