Advertisement
KirylFromBY

Lab11_1

Jan 3rd, 2019
768
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 3.22 KB | None | 0 0
  1. type ordering = LT | EQ | GT;;
  2. let compare s1 s2 = if s1<s2 then LT else                
  3.                       if s1>s2 then GT else EQ;;
  4.  
  5. module type ORDER =
  6.     sig  
  7.         type t  
  8.         val compare: t*int -> (t*int) list -> ordering
  9.     end;;    
  10.  
  11. module IntegerOrder: ORDER with type t = int =
  12.     struct  
  13.         type t = int  
  14.         let compare s1 s2 =
  15.             if (s2 != []) then (
  16.             match (s1,(List.hd s2)) with
  17.             | ((s11,_),(s22,_)) -> if s11<s22 then LT else                
  18.                       if s11>s22 then GT else EQ
  19.             | _ -> LT   ) else LT              
  20.                         end;;
  21.  
  22. module ParaStrStrOrder: ORDER with type t = string*string =
  23.     struct
  24.          
  25.         type t = string*string
  26.         let unzip = function x ->
  27.             match x with
  28.             | (s,_) ->s;;  
  29.         let compare s1 s2 =
  30.             if (s2 != []) then (
  31.             match (s1,(List.hd s2)) with
  32.             | ((s11,_),(s22,_)) -> if (unzip s11)<(unzip s22) then LT else                
  33.                       if (unzip s11)>(unzip s22) then GT else EQ
  34.             | _ -> LT   ) else LT              
  35.                         end;;
  36.  
  37. module type OBSLUGA_KOLEJKI =
  38. sig
  39.     type element
  40.   type 'a tk
  41.   exception Pusta of string
  42.   val tworz_pusta: unit -> 'a tk
  43.   val do_kolejki: element * 'a tk -> 'a tk
  44.     val z_kolejki: 'a tk -> 'a tk
  45.   val pierwszy_element: 'a tk -> element
  46.     val wyswietl_lista: 'a tk -> element list
  47.     val wyswietl_pary: 'a tk -> (element * int) list
  48. end;;
  49.  
  50. module Kolejka (Element: ORDER) : OBSLUGA_KOLEJKI with type element = Element.t = struct  
  51.     type element = Element.t
  52.     type 'a tk = KolejkaPusta | Skladowa of element * 'a tk  
  53.     exception Pusta of string      
  54.     let tworz_pusta() = KolejkaPusta  
  55.     let do_kolejki(e,s) = Skladowa(e,s)  
  56.   let z_kolejki = function Skladowa(_,s) -> s  | KolejkaPusta -> KolejkaPusta
  57.     let pierwszy_element = function Skladowa(e,_) -> e  | KolejkaPusta -> raise (Pusta "module Kolejka: top")
  58.     let rec wyswietl_lista k =
  59.         match k with
  60.         | KolejkaPusta -> []
  61.         | Skladowa(e,s) -> e::(wyswietl_lista s);;
  62.     let rec wyswietl_pary   a = (
  63.         let rec loop index lista_par k = (
  64.             match k with
  65.                 | KolejkaPusta -> lista_par
  66.                 | Skladowa(e,s) -> loop (index+1) (
  67.                             let rec insert el list =
  68.                                 match (Element.compare (el,index) list) with                
  69.                                     | LT  -> (el, index)::list            
  70.                                     | EQ  -> (el, index)::list            
  71.                                     | GT  -> (List.hd list)::
  72.                                 (insert el (List.tl list)) in insert e lista_par) s) in loop 0 [] a);;
  73.        
  74. end;;
  75.  
  76. module KolInt = Kolejka(IntegerOrder);;
  77. let k1 =  KolInt.(do_kolejki(5,
  78.         do_kolejki(10,
  79.         do_kolejki(2,
  80.         do_kolejki(1,
  81.         tworz_pusta())))));;
  82. KolInt.(pierwszy_element k1);;
  83. KolInt.(wyswietl_lista k1);;
  84. KolInt.(wyswietl_pary k1);;
  85. let k1 = KolInt.(z_kolejki k1);;
  86. KolInt.(wyswietl_lista k1);;
  87. let k1 = KolInt.tworz_pusta();;
  88. KolInt.(pierwszy_element k1);;
  89.  
  90. module KolStrStr = Kolejka(ParaStrStrOrder);;
  91. let k2 =  KolStrStr.(do_kolejki(("Nowak","Jan"),
  92.         do_kolejki(("Adamczyk","Pawel"),
  93.         do_kolejki(("Kowalski","Jakub"),
  94.         do_kolejki(("Duda", "Agnieszka"),
  95.         tworz_pusta())))));;
  96.  
  97. KolStrStr.(pierwszy_element k2);;
  98. KolStrStr.(wyswietl_lista k2);;
  99. KolStrStr.(wyswietl_pary k2);;
  100. let k2 = KolStrStr.(z_kolejki k2);;
  101. KolStrStr.(wyswietl_lista k2);;
  102. let k2 = KolStrStr.tworz_pusta();;
  103. KolStrStr.(pierwszy_element k2);;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement