Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.74 KB | None | 0 0
  1. type arbre =  Noeud of bool ref  * (char * arbre) list ref
  2.  
  3. let vide () = Noeud(ref false,ref[])
  4.  
  5. let parcours a lc =
  6.     let get_letter (letter, _) = letter
  7.   in
  8.     let rec find_letter arr letter = match arr, letter with
  9.     | [], _ -> ('#', vide())
  10.     | curr::tail, letter' -> if letter' = (get_letter curr) then curr else find_letter tail letter'
  11.   in
  12.     let rec traverse a lc : ('a * 'b * 'c) = match a, lc with
  13.     | node, [] when node = vide() -> ([], [], a)
  14.     | node, curr::tail when node = vide() -> (lc, [], a)
  15.     | (Noeud(_, arr)) as node, curr::tail -> (
  16.       let (fl, n) = find_letter !arr curr in
  17.       if fl = curr then traverse n tail
  18.       else if fl = '#' then ((curr@tail), [], node)
  19.     )
  20.   in traverse a lc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement