Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Control.Print.printDepth := 100;
  2.  
  3. (*natural (Naravna števila definiramo tako: Obstaja ničla (ZERO).
  4. Vsako naravno število ima svojega naslednika (NEXT).
  5. -----------------------------------------------------------------
  6. Nič ni naslednik nobenega naravnega števila.
  7. Če sta dve števili enaki, sta enaka tudi njuna naslednika.)
  8.  
  9. datatype natural =
  10.     NEXT of natural
  11.     | ZERO
  12. *)
  13.  
  14. (*fun toInt(a: natural): int (vrne celoštevilsko (int) predstavitev naravnega števila)
  15.  
  16.  
  17.  
  18. fun toInt(a: natural): int =
  19.  
  20.     case a of
  21.         NEXT b => toInt(b) +1
  22.         | ZERO => 0
  23.  
  24. val test_toInt1 = 0 = toInt(ZERO);
  25. val test_toInt2 = 1 = toInt(NEXT(ZERO));
  26. val test_toInt3 = 12 = toInt(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))))))))));*)
  27.  
  28.  
  29. (*fun add(a: natural, b: natural): natural (vrne naravno število, ki ustreza vsoti števil a in b · deluje naj direktno na naravnih številih, brez pretvorbe v int)
  30. fun add(a: natural, b: natural): natural =
  31.     case a of
  32.         NEXT a => NEXT (add(b,a))
  33.         | ZERO =>  b
  34.  
  35. val test_add1 = ZERO = add(ZERO, ZERO);
  36. val test_add2 = NEXT(ZERO) = add(NEXT(ZERO), ZERO);
  37. val test_add3 = NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))) = add(NEXT(NEXT(NEXT(ZERO))), NEXT(NEXT(NEXT(ZERO))));
  38. val test_add4 = NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))))) = add(NEXT(NEXT(ZERO)), NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))));
  39. val test_add5 = NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))))) = add(NEXT(NEXT(NEXT(NEXT(NEXT(NEXT(ZERO)))))), NEXT(NEXT(ZERO)));
  40. val test_add6 = NEXT(ZERO) = add(ZERO, NEXT(ZERO));*)
  41.  
  42.  
  43. (*----------------------------------------------------------------------------------------------------*)
  44. (* bstree (Binarno iskalno drevo definiramo tako: Obstaja prazno iskalno drevo (lf).
  45. Obstaja tudi veja (br), za katero poznamo vrednost elementa v njej ter obe poddrevesi (bstree * int * bstree).
  46. Za poddrevesi velja, da so vsi elementi znotraj levega poddrevesa (strogo) manjši od elementa v veji, vsi elementi desnega poddrevesa pa so (strogo) večji.
  47.  
  48. val tree = br (br (br (lf, 2, lf), 7, lf), 9, br (br (lf, 13, lf), 21, br (lf, 25, lf)))
  49. *)
  50.  
  51. datatype bstree =
  52.     br of bstree * int * bstree
  53.     | lf
  54.  
  55.      
  56. val tree = br (br (br (lf, 2, lf), 7, lf), 9, br (br (lf, 13, lf), 21, br (lf, 25, lf)));
  57.  
  58. (*fun min(tree: bstree): int option (vrne najmanjši element drevesa, če ta obstaja)
  59. fun min(tree: bstree): int option =
  60.         case tree of
  61.         br(left, i, _) => if(left = lf) then SOME i else min(left)
  62.         | lf => NONE
  63.        
  64.  
  65. val test_min1 = NONE = min(lf);
  66. val test_min2 = SOME 5 = min(br(lf, 5, lf));
  67. val test_min3 = SOME 2 = min(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))));
  68. val test_min4 = SOME(~3) = min(br(br(br(br(lf, ~3, lf), ~1, lf), 3, lf), 100, lf));
  69. val test_min5 = SOME 2 = min(br(br(lf, 2, lf), 5, lf));*)
  70.  
  71. (*fun max(tree: bstree): int option (vrne največji element drevesa, če ta obstaja)
  72. fun max(tree: bstree): int option =
  73.     case tree of
  74.             br(_, i, right) => if(right = lf) then SOME i else max(right)
  75.             | lf => NONE
  76.  
  77.  
  78. val test_max1 = NONE = max(lf);
  79. val test_max2 = SOME 5 = max(br(lf, 5, lf));
  80. val test_min3 = SOME 25 = max(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))));
  81. val test_max4 = SOME 100 = max(br(br(br(br(lf, ~3, lf), ~1, lf), 3, lf), 100, lf));
  82. val test_max5 = SOME 5 = max(br(br(lf, 2, lf), 5, lf));*)
  83.  
  84. (*fun contains(tree: bstree, x: int): bool (vrne true, če drevo vsebuje vejo s podano vrednostjo)
  85. fun contains(tree: bstree, x: int): bool =
  86.     case tree of
  87.         br(left, i, right) => if(x < i) then contains(left, x)
  88.                               else if(x > i) then contains(right, x)
  89.                               else true
  90.         | lf => false
  91.  
  92. val test_contains1 = false = contains(lf, 500)
  93. val test_contains2 = true = contains(br(lf, 5, lf), 5)
  94. val test_contains3 = true = contains(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))), 21)
  95. val test_contains4 = true = contains(br(br(br(br(lf, ~3, lf), ~1, lf), 3, lf), 100, lf), ~3)
  96. val test_contains5 = false = contains(br(lf, 5, br(lf, 6, lf)), 4)
  97. val test_contains6 = false = contains(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))), 3)*)
  98.  
  99. (*fun countLeaves(tree: bstree): int (vrne število listov (lf) v drevesu)
  100. fun countLeaves(tree: bstree): int =
  101.     case tree of
  102.         br(left, i, right) => countLeaves(left) + countLeaves(right)
  103.         | lf => 1
  104.  
  105.  
  106. val test_countLeaves1 = 1 = countLeaves(lf)
  107. val test_countLeaves2 = 2 = countLeaves(br(lf, 5, lf))
  108. val test_countLeaves3 = 7 = countLeaves(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))))
  109. val test_countLeaves4 = 5 = countLeaves(br(br(br(br(lf, ~2, lf), ~1, lf), 3, lf), 100, lf))
  110. val test_countLeaves5 = 3 = countLeaves(br(lf, 5, br(lf, 6, lf))) *)
  111.  
  112. (*br (br (br (lf, 2, lf), 7, lf), 9, br (br (lf, 13, lf), 21, br (lf, 25, lf)))
  113.  
  114. br (br (lf, 2, lf), 7, lf      ||  br (br (lf, 13, lf), 21, br (lf, 25, lf))
  115.  
  116. br (lf, 2, lf || lf            ||  br (lf, 13, lf), ||  br (lf, 25, lf)
  117.     lf || lf                          lf ||lf              lf || lf       *)
  118.  
  119. (*fun countBranches(tree: bstree): int (vrne število vej (br) v drevesu)
  120.  
  121. fun countBranches(tree: bstree): int =
  122.     case tree of
  123.         br(left, i, right) => countBranches(left) + countBranches(right) +1
  124.         | lf => 0
  125.  
  126. val test_countBranches1 = 0 = countBranches(lf)
  127. val test_countBranches2 = 1 = countBranches(br(lf, 5, lf))
  128. val test_countBranches3 = 6 = countBranches(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))))
  129. val test_countBranches4 = 4 = countBranches(br(br(br(br(lf, ~2, lf), ~1, lf), 3, lf), 100, lf))
  130. val test_countBranches5 = 2 = countBranches(br(lf, 5, br(lf, 6, lf))) *)
  131.  
  132. (*fun toList(tree: bstree): int list (vrne seznam urejenih elementov podanega drevesa,
  133. v seznamu naj bo prvi element min(tree), zadnji pa max(tree)
  134. · za združevanje seznamov lahko uporabite operator @)
  135.  
  136. fun toList(tree: bstree): int list =
  137.     case tree of
  138.         br(left, i, right) => toList(left) @ [i] @ [] @ toList(right)
  139.         | lf => []
  140.  
  141. val test_toList1 = [] = toList(lf)
  142. val test_toList2 = [5] = toList(br(lf, 5, lf))
  143. val test_toList3 = [2,7,9,13,21,25] = toList(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))))
  144. val test_toList4 = [~2,~1,3,100] = toList(br(br(br(br(lf, ~2, lf), ~1, lf), 3, lf), 100, lf))
  145. val test_toList5 = [5,6] = toList(br(lf, 5, br(lf, 6, lf))) *)
  146.  
  147. (* fun valid(tree: bstree): bool (vrne true, če je podano drevo veljavno binarno iskalno drevo (glej definicijo zgoraj))
  148. fun pridobi(tree: bstree): int =
  149.     case tree of
  150.         br(_,i,_) => i
  151.         | lf => 0
  152.  
  153.  
  154. fun valid(tree: bstree): bool =
  155.     case tree of              
  156.         br(left, i, right) =>
  157.             if(pridobi(left) >= i andalso i >= pridobi(right)) then false
  158.             else valid(left) andalso valid(right)
  159.         | lf => true
  160.  
  161. val test_valid1 = true = valid(lf)
  162. val test_valid2 = true = valid(br(lf, 5, lf))
  163. val test_valid3 = true = valid(br(br(br(lf, 2, lf), 7, lf), 9, br(br(lf, 13, lf), 21, br(lf, 25, lf))))
  164. val test_valid5 = true = valid(br(lf, 5, br(lf, 6, lf)))
  165. val test_valid4 = false = valid(br(br(br(br(lf, ~3, lf), ~1, lf), 3, lf), 0, lf))
  166. val test_valid6 = false = valid(br(br(br(lf, 6, lf), 3, lf), 5, lf))
  167. val test_valid7 = false = valid(br(br(br(lf, 3, lf), 3, lf), 3, lf)) *)
  168.  
  169.  
  170. (*fun oldest(people: {age:int, name:string} list): string option
  171. (vrne ime najstarejše osebe (če obstaja) v seznamu zapisov oblike {name="ime", age=starost})*)
  172.  
  173. fun oldest(people: {age:int, name:string} list): string option =
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement