TP-programmation-fonctionnelle/TP4/sourceEtu/trie.ml

74 lines
4.4 KiB
OCaml
Raw Permalink Normal View History

2023-06-21 18:13:54 +00:00
open Assoc
open Arbre
open Chaines
(* le type trie :
triplet arbre,
fonction de décomposition mot -> liste de caractères,
fonction de recomposition liste de caractères -> mot *)
type ('a,'b) trie = Trie of ('b arbre) * ('a -> 'b list) * ('b list -> 'a)
(******************************************************************************)
(* fonction de création d'un nouveau trie *)
(* signature : nouveau : *)
(* ('a -> 'b list) -> ('b list -> 'a) -> ('a, 'b) trie = <fun> *)
(* paramètres : - une fonction de décomposition *)
(* mot -> liste de caractères *)
(* - une fonction de recomposition *)
(* liste de caractères -> mot *)
(* résultat : un nouveau trie "vide" *)
(******************************************************************************)
let nouveau fd fr = Trie(Noeud(false,[]), fd, fr)
(******************************************************************************)
(* fonction d'appartenance d'un élément à un trie *)
(* signature : appartient : 'a -> ('a, 'b) trie -> bool = <fun> *)
(* paramètres : - un mot *)
(* - un trie *)
(* résultat : le résultat booléen du test *)
(******************************************************************************)
let appartient mot trie = failwith "TO DO appartient"
(******************************************************************************)
(* fonction d'ajout d'un élément dans un trie *)
(* signature : ajout : 'a -> ('a, 'b) trie -> ('a, 'b) trie = <fun> *)
(* paramètres : - un mot *)
(* - un trie *)
(* résultat : le trie avec le mot ajouté *)
(******************************************************************************)
let ajout mot (Trie(arbre, decompose, recompose)) =
Trie (ajout_arbre (decompose mot) arbre,decompose,recompose)
(* Pour les tests *)
let trie_sujet =
List.fold_right ajout
["bas"; "bât"; "de"; "la"; "lai"; "laid"; "lait"; "lard"; "le"; "les"; "long"]
(nouveau decompose_chaine recompose_chaine)
(******************************************************************************)
(* fonction de retrait d'un élément d'un trie *)
(* signature : trie_retrait : 'a -> ('a, 'b) trie -> ('a, 'b) trie = <fun> *)
(* paramètres : - un mot *)
(* - un trie *)
(* résultat : le trie avec le mot retiré *)
(******************************************************************************)
let retrait mot trie = failwith "TO DO retrait"
(******************************************************************************)
(* fonction interne au Module qui génère la liste de tous les mots *)
(* d'un trie *)
(* signature : trie_dico : ('a, 'b) trie -> 'a list = <fun> *)
(* paramètre(s) : le trie *)
(* résultat : la liste des mots *)
(******************************************************************************)
let trie_dico trie = failwith "trie_dico"
(******************************************************************************)
(* procédure d'affichage d'un trie *)
(* signature : affiche : ('a -> unit) -> ('a, 'b) trie -> unit = <fun> *)
(* paramètres : - une procédure d'affichage d'un mot *)
(* - un trie *)
(* résultat : aucun *)
(******************************************************************************)
let affiche p trie = failwith "TO DO affiche"