Advertisement
Guest User

Untitled

a guest
Jan 11th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.91 KB | None | 0 0
  1. module type QUEUE_FUN =
  2.     sig
  3.         type 'a t
  4.         exception Empty of string
  5.         val empty: unit -> 'a t
  6.         val enqueue: 'a * 'a t -> 'a t
  7.         val dequeue: 'a t -> 'a t
  8.         val first: 'a t -> 'a
  9.         val isEmpty: 'a t -> bool
  10.     end;;
  11.  
  12. module PairQueue : QUEUE_FUN =
  13.   struct
  14.         type 'a t = 'a list * 'a list
  15.        
  16.     exception Empty of string
  17.    
  18.     let empty() = ([],[])
  19.        
  20.         let enqueue (element, queue) =
  21.             match queue with
  22.             | ([], []) -> ([element], [])
  23.             | (l1, l2) -> (l1, element::l2)
  24.            
  25.         let dequeue queue =
  26.             match queue with
  27.             | (_::[], l2) -> (List.rev l2, [])
  28.             | (_::t, l2) -> (t, l2)
  29.             | ([], []) -> ([], [])
  30.  
  31.         let first = function
  32.             | (h1::_, _) -> h1
  33.             | ([], []) -> raise (Empty "module PairQueue: first")
  34.            
  35.  
  36.         let isEmpty queue =
  37.             queue = ([], [])
  38.     end;;
  39.  
  40. let x = PairQueue.empty();;
  41. PairQueue.dequeue(PairQueue.enqueue(2, PairQueue.enqueue(4,x))) = PairQueue.enqueue(2,x);;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement