Advertisement
Guest User

Untitled

a guest
Jan 24th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.64 KB | None | 0 0
  1.  
  2. module type QUEUE_FUN =
  3. sig
  4.  type 'a q
  5.  exception Empty of string
  6.  val empty: unit -> 'a q
  7.  val enqueue: 'a * 'a q -> 'a q
  8.  val dequeue: 'a q -> 'a q
  9.  val top: 'a q -> 'a
  10.  val get:  int * 'a q  -> 'a
  11.  val tolist: 'a q -> 'a list
  12. end
  13.  
  14.  
  15. module QUEUE : QUEUE_FUN =
  16. struct
  17.      type 'a q = EmptyQueue | Enqueue of 'a * 'a q
  18.     exception Empty of string
  19.      let  empty() = EmptyQueue
  20.  
  21.      let rec enqueue(elem, queue) =
  22.         match queue with
  23.         (*Enqueue(elem, Enqueue(next, nextque)) -> Enqueue(elem, enqueue(next, nextque))*)
  24.         (*Enqueue(e, Enqueue(e2, q2)) -> Enqueue(e, enqueue(e2, q2))*)
  25.      (* EmptyQueue -> Enqueue(elem, EmptyQueue)*)
  26.        
  27.         |Enqueue(e, q) -> Enqueue(elem, enqueue(e, q))
  28.         |EmptyQueue -> Enqueue(elem, EmptyQueue)
  29.    
  30.  
  31.  
  32.     let  dequeue(queue) =
  33.         match queue with
  34.         Enqueue(elem, q) -> q
  35.         | EmptyQueue -> EmptyQueue
  36.  
  37.     let top queue =
  38.     match queue with
  39.     EmptyQueue -> raise (Empty "top : Pusta kolejka")
  40.     |Enqueue(elem, _) -> elem
  41.  
  42.     let rec get (n, queue) =
  43.     match (n, queue) with
  44.     (0, Enqueue(elem, queue)) -> elem
  45.     |(_, EmptyQueue) -> raise (Empty "get: poza zakresem")
  46.     |(n, Enqueue(e, q)) -> get(n-1, q)
  47.  
  48.     let rec tolist queue =
  49.     match queue with
  50.     Enqueue(elem, queue) -> elem::tolist(queue)
  51.     |EmptyQueue -> []
  52. end
  53. module Qq = QUEUE;;
  54. (*let q = QUEUE.empty();;QUEUE.enqueue(1, QUEUE.enqueue(2, QUEUE.enqueue(3, QUEUE.empty())));;*)
  55. (*let q = QUEUE.Enqueue(1, QUEUE.Enqueue(2, QUEUE.Enqueue(3, QUEUE.EmptyQueue)));;*)
  56. let q = Qq.empty();;
  57. let q = Qq.enqueue(3, q);;
  58. let q = Qq.enqueue(2, q);;
  59.  let q = Qq.enqueue(1, q);;
  60.  
  61.  
  62.  Qq.get(1, q);;
  63.  
  64. let q = Qq.dequeue( q);;
  65.  Qq.get(1, q);;
  66.  Qq.tolist(q)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement