Advertisement
karol_dziachan

Queue (pair-list) OCaml

Jan 9th, 2021
2,995
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.20 KB | None | 0 0
  1.  module type QUEUE_FUN =
  2. sig
  3.  type 'a queue
  4.  exception Empty of string
  5.  val empty: unit -> 'a queue
  6.  val enqueue: 'a * 'a queue -> 'a queue
  7.  val dequeue: 'a queue -> 'a queue
  8.  val first: 'a queue -> 'a
  9.  val isEmpty: 'a queue -> bool
  10. end;;
  11.  
  12. module MyQueue : QUEUE_FUN  =
  13. struct
  14.   type 'a queue =  'a list * 'a list
  15.   exception Empty of string
  16.   let empty() = ([], [])
  17.   let enqueue (e, q) =
  18.     match q with
  19.       ([], _) -> ([e], [])
  20.       | (fstList, sndList) -> (fstList, sndList @ [e])
  21.   let dequeue = function
  22.       ([], _) -> ([], [])
  23.       | (_::t, sndList) -> if t = [] then (List.rev sndList, [])
  24.                           else (t, sndList)
  25.   let first q =
  26.     match fst(q) with
  27.       [] -> raise (Empty "module MyQueue: first")
  28.     | h::t -> h
  29.   let isEmpty q = fst(q) = []
  30. end;;
  31.  
  32. let k = MyQueue.empty();;
  33. MyQueue.isEmpty k;;
  34. let k = MyQueue.enqueue(1, k);;
  35. let k = MyQueue.enqueue(2, k);;
  36. let k = MyQueue.enqueue(3, k);;
  37. let k = MyQueue.enqueue(4, k);;
  38. let k = MyQueue.enqueue(5, k);;
  39. MyQueue.isEmpty k;;
  40. MyQueue.first k;;
  41. let k = MyQueue.dequeue k;;
  42. MyQueue.first k;;
  43. let k = MyQueue.dequeue k;;
  44. MyQueue.first k;;
  45. let k = MyQueue.dequeue k;;
  46. MyQueue.first k;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement