Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.73 KB | None | 0 0
  1.  
  2.   module Queue =
  3.     (*
  4.     //EXAMPLES
  5.  
  6.     let q =
  7.       List.fold (fun queue item -> queue|> Queue.enqueue item) Queue.empty [1..10]
  8.  
  9.     Queue.size q // 10
  10.  
  11.     let first, q2 = Queue.dequeue q
  12.  
  13.     Queue.size q2 // 9
  14.     *)
  15.    
  16.     type Queue<'a> = Queue of 'a list * 'a list
  17.  
  18.     let empty = Queue([], [])
  19.  
  20.     let enqueue item = function
  21.       | Queue(front, back) ->
  22.         Queue(front, item :: back)
  23.  
  24.     let rec dequeue = function
  25.       | Queue([], []) -> failwith "Empty queue"
  26.       | Queue([], back) -> Queue(back |> List.rev, []) |> dequeue
  27.       | Queue(front, back) -> front|> List.head, Queue(front|> List.tail, back)
  28.  
  29.     let size = function
  30.       | Queue(front, back) -> front.Length + back.Length
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement