Advertisement
Keodedad

TD6

Apr 9th, 2019
1,070
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.95 KB | None | 0 0
  1. (* Feuille de TD 6 *)
  2.  
  3. (* Exercice 1 *)
  4.  
  5. type 'a list = Vide | Const of 'a * 'a list
  6.  
  7. let rec inserer a l =
  8.   match l with
  9.     Vide -> Const (a, Vide)
  10.   | Const (x, l') -> Const (x, inserer a l')
  11.                        
  12. let decaler l =
  13.   match l with
  14.     Vide -> failwith "Liste Vide"
  15.   | Const (h, t) -> inserer h t
  16.  
  17. let rec applyn f x n =
  18.   if n > 0 then applyn f (f x) (n-1) else x
  19.  
  20. let rotation l n = applyn decaler l n
  21.  
  22. let _ = rotation [1;2;3;4] 2
  23.  
  24. (* Exercice 3 *)
  25.  
  26. type tree = Val of int | Node of int * tree * tree
  27.  
  28. (* Pour réaliser la multiplication sur un arbre on a deux cas
  29.    - soit on a une feuille et on retourne sa valeur
  30.    - soit on a un noeud, et on multiplie sa valeur et celles de ces fils
  31.    - le schéma ressemble à celui du fold sur les listes, la fonction est ici une
  32.    fonction ternaire qui combine la valeur du noeud et celles de ces fils *)
  33.  
  34. let rec tree_fold =
  35.   fun f g t ->
  36.   match t with
  37.     Val x -> g x
  38.   | Node (n, a, b) -> f n (tree_fold f g a) (tree_fold f g b)
  39.  
  40. let rec mult = tree_fold (fun x y z -> x * y * z) (fun x -> x)
  41.  
  42. let _ = mult (Node (1, Node (2, Val 3, Val 4), Val 5))
  43.  
  44. let in0 = tree_fold (fun x y z -> x = 0 || y || z) (fun x -> x = 0)
  45.  
  46. exception ZeroFound
  47.  
  48. let mult0 = fun t ->
  49.   if in0 t then raise ZeroFound else mult t
  50.  
  51. let mult_exn = fun t ->
  52.   try mult0 t with ZeroFound -> 0
  53.  
  54. (* Exercice 4 *)
  55.  
  56. (* Partie 1 *)
  57.    
  58. type 'a tab = int -> 'a
  59.  
  60. let init_tab (e : 'a) : 'a tab  = fun x -> e
  61.  
  62. let val_tab (t : 'a tab) (i : int) : 'a = t i
  63.  
  64. let maj_tab (t : 'a tab) (i : int) (e : 'a) =
  65.   fun x -> if x = i then e else t i
  66.  
  67. (* Partie 2 *)
  68.  
  69.  
  70. type message = Taille | Val of int
  71.  
  72. type itab = message -> int
  73.  
  74. let tableau (n : int) ( e : int) : itab  =
  75.   let t = init_tab e in
  76.   fun x ->
  77.     match x with
  78.       Taille -> n
  79.     | Val i -> val_tab t i
  80.  
  81. let maj (t :itab) (i : int) (e : int) : itab =
  82.   fun x ->
  83.   match x with
  84.     Val j when i = j -> e
  85.   | _ -> t x
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement