Advertisement
Guest User

Untitled

a guest
Apr 28th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 10.32 KB | None | 0 0
  1. (*    PROJET    Heeder Mathieu, Herzhaft Enzo *)
  2.  
  3. type 'a ensemble =
  4.     |Ve
  5.     |Ce of 'a * 'a ensemble
  6. ;;
  7. (========================cardinale ===========================)
  8. let rec cardinale (x:'a ensemble):int =
  9.     match x with
  10.     | Ve -> 0
  11.     | Ce(t,suite) -> 1 +  cardinale suite
  12. ;;
  13. cardinale (Ce(1,Ce(2,Ve)));;
  14. (========================apport ===========================)
  15. let rec apport (elm:'a) (x:'a ensemble):bool =
  16.     match x with
  17.      Ve -> false
  18.     | Ce(e,suite) -> if elm = e then true
  19.                         else apport elm suite
  20. ;;
  21. apport 2 (Ce(1,Ce(2,Ve)));;
  22. apport 10 (Ce(1,Ce(2,Ve)));;
  23.  
  24. (=========================inclusion ==========================)
  25. let rec inclusion (x:'a ensemble) (y:'a ensemble) :bool=
  26.     match x with
  27.      Ve -> true
  28.     | Ce(e,suite) -> apport e y && inclusion suite y
  29. ;;
  30. inclusion (Ce(1,Ce(2,Ve))) (Ce(1,Ce(2,Ve)));; (true)
  31. inclusion (Ce(1,Ce(3,Ve))) (Ce(1,Ce(2,Ve)));; (false)
  32. (=========================ajout ==========================)
  33. let ajout (elm:'a) (x:'a ensemble):'a ensemble=
  34.      if apport elm x then x
  35.      else Ce(elm,x)
  36. ;;
  37. ajout 7 (Ce(1,Ce(2,Ve)));;
  38. ajout 1 (Ce(1,Ce(2,Ve)));;
  39. (=========================suppr ==========================)
  40. let rec suppr (elm:'a) (x:'a ensemble) :'a ensemble=
  41.      match x with
  42.      Ve -> Ve
  43.     | Ce(e,suite) -> if elm = e then suppr elm suite
  44.                         else Ce(e,suppr elm suite)
  45. ;;
  46. suppr 7 (Ce(1,Ce(2,Ve)));;
  47. suppr 1 (Ce(1,Ce(2,Ve)));;
  48. (=========================ega ==========================)
  49. let ega (x:'a ensemble) (y:'a ensemble) :bool=
  50.     if (cardinale x) = (cardinale y) then inclusion x y
  51.     else false
  52. ;;
  53. ega (Ce(1,Ce(2,Ve))) (Ce(1,Ce(2,Ve)));;
  54. ega (Ce(1,Ce(2,Ve))) (Ce(1,Ce(3,Ve)));;
  55. ega (Ce(2,Ve)) (Ce(1,Ce(3,Ve)));;
  56. (=========================inter ==========================)
  57. let rec inter (x:'a ensemble) (y:'a ensemble) :'a ensemble=
  58.     match x with
  59.      Ve -> Ve
  60.     | Ce(e,suite) -> if apport e y then Ce(e,inter suite y)
  61.                         else inter suite y
  62. ;;
  63. inter (Ce(1,Ce(2,Ve))) (Ce(2,Ce(3,Ve)));;
  64.  
  65. (=========================diff ==========================)
  66. let rec diff (x:'a ensemble) (y:'a ensemble) :'a ensemble =
  67.     match x with
  68.      Ve -> Ve
  69.     | Ce(e,suite) -> if apport e y then diff suite y
  70.                         else  Ce(e, diff suite y)
  71. ;;
  72. diff (Ce(1,Ce(2,Ce(3,Ve)))) (Ce(3,Ve));;
  73. (=========================union ==========================)
  74. let rec union (x:'a ensemble) (y:'a ensemble):'a ensemble =
  75.     match x with
  76.     Ve -> y
  77.         | Ce(e,suite) -> if apport e y then union suite y
  78.              else union suite (ajout e y)
  79.        
  80.    
  81. ;;
  82. union (Ce(1,Ce(2,Ce(3,Ve)))) (Ce(4,Ce(5,Ce(6,Ve))));;
  83. (=========================diffsys ==========================)
  84. let rec diffsys (x:'a ensemble) (y:'a ensemble) :'a ensemble=
  85.     match x with
  86.     Ve -> y
  87.         | Ce(e,suite) -> if apport e y then diffsys suite (suppr e y)
  88.              else diffsys suite (ajout e y)
  89. ;;
  90. diffsys (Ce(1,Ce(2,Ce(3,Ve)))) (Ce(4,Ce(5,Ce(6,Ve))));;
  91. diffsys (Ce(1,Ce(2,Ce(3,Ve)))) (Ce(2,Ce(3,Ce(4,Ve))));;
  92.  
  93.  
  94.  
  95. (*            AVEC LISTE                 *)
  96.  
  97.  
  98.  
  99.  
  100. (========================cardinale ===========================)
  101. let rec cardinaleL x =
  102.     match x with
  103.      [] -> 0
  104.     | e :: suite -> 1 +  cardinaleL suite
  105. ;;
  106. cardinaleL [1;2;3;4;5;6;8];;
  107. (========================apport ===========================)
  108. let rec apportL elm x =
  109.     match x with
  110.      [] -> false
  111.     | e :: suite -> if elm = e then true
  112.                         else apportL elm suite
  113. ;;
  114. apportL 2 [1;2;3;4;5;6;8];;
  115. apportL 10 [1;2;3;4;5;6;8];;
  116.  
  117. (=========================inclusion ==========================)
  118. let rec inclusionL x y =
  119.     match x with
  120.      [] -> true
  121.     | e :: suite -> apportL e y && inclusionL suite y
  122. ;;
  123. inclusionL [1;2;3;4;5;6] [1;2;3;4;5;6;8];; (true)
  124. inclusionL [1;2;3;4;5;7] [1;2;3;4;5;6;8];; (false)
  125. (=========================ajout ==========================)
  126. let ajoutL elm x =
  127.      if apportL elm x then x
  128.      else elm :: x
  129. ;;
  130. ajoutL 7 [1;2;3;4;5;6];;
  131. ajoutL 1 [1;2;3;4;5;6];;
  132. (=========================suppr ==========================)
  133. let rec supprL elm x =
  134.      match x with
  135.      [] -> []
  136.     | e :: suite -> if elm = e then supprL elm suite
  137.                         else e :: supprL elm suite
  138. ;;
  139. supprL 7 [1;2;3;4;5;6];;
  140. supprL 1 [1;2;3;4;5;6];;
  141. (=========================ega ==========================)
  142. let egaL x y =
  143.     if (cardinaleL x) = (cardinaleL y) then inclusionL x y
  144.     else false
  145. ;;
  146. egaL [1;2;3;4;5;6] [1;2;3;4;5;6];;
  147. egaL [1;2;3;4;5] [1;2;3;4;5;6];;
  148. egaL [1;2;3;4;5;6] [1;2;3;4;5;7];;
  149. (=========================inter ==========================)
  150. let rec interL x y =
  151.     match x with
  152.      [] -> []
  153.     | e :: suite -> if apportL e y then e :: interL suite y
  154.                         else interL suite y
  155. ;;
  156. interL [1;2;3;4;5;6] [8;7;3;9;5;10];;
  157.  
  158. (=========================diff ==========================)
  159. let rec diffL x y =
  160.     match x with
  161.      [] -> []
  162.     | e :: suite -> if apportL e y then diffL suite y
  163.                         else  e :: diffL suite y
  164. ;;
  165. diffL [1;2;3;4;5;6] [8;7;3;9;5;10];;
  166. (=========================union ==========================)
  167. let unionL x y =
  168.     diffL x y @ interL x y @ diffL y x
  169. ;;
  170. unionL [1;2;3;4;5;6] [8;7;3;9;5;10];;
  171. (=========================diffsys ==========================)
  172. let rec diffsysL x y =
  173.     diffL x y @ diffL y x
  174. ;;
  175. diffsysL [1;2;3;4;5;6] [8;7;3;9;5;10];;
  176.  
  177. (===========================================================)
  178. (*                        multiensemble                      *)
  179. (===========================================================)
  180.  
  181. type 'a multiElement = 'a * int ;;
  182.  
  183. type 'a multiEnsemble = 'a multiElement list;;
  184. let rec cardinaliteACU (y:'a multiEnsemble) (n:int) (b:int) :int*int=
  185.     match y with
  186.     [] -> (n,b)
  187.     |(elm,i):: suite -> (cardinaliteACU suite (n+i) (b+1))
  188. ;;
  189. let rec cardinaliteME (x:'a multiEnsemble) : int*int =
  190.   (cardinaliteACU x 0 0)
  191. ;;
  192. cardinaliteME [('a',3);('b',1);('z',5);('r',1)];;
  193. let rec occurenceME (x:'a multiEnsemble) (elem:'a) :int=
  194.   match x with
  195.   [] -> 0
  196.   |(elm,i):: suite -> if(elm = elem) then i + (occurenceME suite elem)
  197.           else (occurenceME suite elem)
  198. ;;
  199. occurenceME [('a',3);('b',1);('z',5);('r',1)] 'r' ;;
  200. occurenceME [('r',1);('a',3);('b',1);('z',5);('r',1)] 'r' ;;
  201. let rec appartenanceME (x:'a multiEnsemble) (elem:'a) :bool= (* ========================================================*)
  202.  match x with
  203.  [] -> false
  204.  |(elm,i) :: suite ->if(elm = elem) then true
  205.        else (appartenanceME suite elem)
  206. ;;
  207. appartenanceME [('a',3);('b',1);('z',5);('r',1)] 'r' ;;
  208. appartenanceME [('a',3);('b',1);('z',5);('r',1)] 'u' ;;
  209. let rec inclusionME (x:'a multiEnsemble) (y:'a multiEnsemble) :bool=
  210.  match x with
  211.  [] -> true
  212.  |(elm,i) :: suite ->if(i <= occurenceME y elm)then inclusionME suite y
  213.        else false
  214. ;;
  215. inclusionME [('a',3);('b',1);('z',5);('r',1)] [('a',3);('b',1);('z',5);('r',1)] ;;
  216. inclusionME [('a',3);('b',1);('z',5);('r',1)] [('a',3);('b',1);('z',5)] ;;
  217. inclusionME [('a',4);('b',1);('z',5);('r',1)] [('a',3);('b',1);('z',5);('r',1)] ;;
  218. let rec ajoutME (x:'a multiEnsemble) (multy: 'a multiElement) :'a multiEnsemble=
  219.  let (elmi, ii) = multy in
  220.  match x with
  221.  [] -> multy :: []
  222.  |(elm,i)::suite ->if(elm = elmi) then (elm,(i+ii)) :: suite
  223.      else (elm,i)::(ajoutME suite multy)
  224. ;;
  225. ajoutME [('a',3);('b',1);('z',5);('r',1)] ('r',2) ;;
  226. ajoutME [('a',3);('b',1);('z',5);('r',1)] ('c',2) ;;
  227. let rec supprME (x:'a multiEnsemble) (multy: 'a multiElement) :'a multiEnsemble=
  228.  let (elmi, ii) = multy in
  229.  match x with
  230.  [] -> []
  231.  |(elm,i)::suite ->if(elm = elmi) then if(i-ii > 0)then (elm, (i-ii))::suite
  232.            else suite
  233.      else (elm,i)::(supprME suite multy)
  234. ;;
  235. supprME [('a',3);('b',1);('z',5);('r',1)] ('z',1) ;;
  236. supprME [('a',3);('b',1);('z',5);('r',1)] ('r',1) ;;
  237. supprME [('a',3);('b',1);('z',5);('r',1)] ('r',2) ;;
  238. supprME [('a',3);('b',1);('z',5);('r',1)] ('c',2) ;;
  239.  
  240. let rec egalME (x:'a multiEnsemble) (y:'a multiEnsemble) :bool=
  241.  match x with
  242.  [] -> true
  243.  |(elm,i)::suite -> (occurenceME x elm = occurenceME y elm) && (egalME suite y)
  244. ;;
  245. egalME [('a',3);('b',1);('z',5);('r',1)] [('a',3);('b',1);('z',5);('r',1)] ;;
  246. egalME [('a',3);('b',1);('z',5);('r',1)] [('a',3);('b',1);('z',5);('r',2)] ;;
  247. egalME [('a',3);('b',1);('z',2);('r',1)] [('a',3);('b',1);('z',5);('r',1)] ;;
  248. let rec interME (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble = (by micky le génie)
  249.  match x with
  250.  [] -> []
  251.  |(elm,i)::suite -> if(occurenceME y elm = 0)then interME suite y
  252.       else if(i <= occurenceME y elm)then (elm,i)::interME suite y
  253.            else (elm,(occurenceME y elm))::interME suite y
  254. ;;
  255. interME [('a',1);('b',1)] [('a',8);('b',8)] ;;
  256. interME [('a',1);('c',1)] [('a',8);('b',8)] ;;
  257. interME [('a',8);('c',1)] [('a',5);('b',8)] ;;
  258. let rec unionACU (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble=
  259.  match x with
  260.  [] -> []
  261.  |(elm,i)::suite -> if((occurenceME x elm) > (occurenceME y elm)) then (elm,i)::(unionACU suite y)
  262.       else (unionACU suite y)
  263. ;;
  264. let rec egalUNI (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble=
  265.  match x with
  266.  [] -> []
  267.  |(elm,i)::suite -> if((occurenceME x elm) = (occurenceME y elm)) then (elm,i) :: (egalUNI suite y)
  268.       else (egalUNI suite y)
  269. ;;
  270. let rec unionME (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble=
  271.  (unionACU x y) @ (unionACU y x) @ (egalUNI x y)
  272. ;;
  273. unionME [('a',1);('b',2)] [('c',8);('b',8)] ;;
  274. unionME [('a',1);('b',8)] [('c',8);('b',8)] ;;
  275.  
  276. let rec diffME (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble=
  277.  match x with
  278.  [] -> []
  279.  |(elm,i)::suite -> if(occurenceME y elm = 0)then (elm,i)::diffME suite y
  280.       else diffME suite y
  281. ;;
  282. diffME [('a',1);('b',1)] [('a',8);('b',8)] ;;
  283. diffME [('a',8);('c',1)] [('a',5);('b',8)] ;;
  284. let diffsysME (x:'a multiEnsemble) (y:'a multiEnsemble) :'a multiEnsemble=
  285.  diffME x y @ diffME y x
  286. ;;
  287. diffsysME [('a',1);('b',1)] [('a',8);('b',8)] ;;
  288. diffsysME [('a',8);('c',1)] [('a',5);('b',8)] ;;
  289. (===============partitage 5 : bounus====================)
  290. type lettre = char;;
  291. type mot = lettre list;;
  292. type 'a ensembleListe = 'a list;;
  293. type dictionnaire = mot ensembleListe;;
  294. let cst_DICO :dictionnaire=
  295. [
  296. ['m';'i';'n';'i';'s';'t';'r';'e'] ;
  297. ['s';'e';'c';'h';'e'] ;
  298. ['m';'i';'c';'h';'e';'s'];
  299. ['f';'o';'u';'i';'l';'l';'e';'r']
  300. ];;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement