Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.18 KB | None | 0 0
  1. type colore= Rosso | Blu | Verde | Giallo
  2. type 'a col_assoc= ('a * colore)list
  3. (*vicini : 'a -> 'a graph ->'a list*)
  4. (*vicini n grafo = lista dei vicini partendo da un nodo n nel grafo orientato rappresentato da g*)
  5.  
  6. let rec vicini nodo= function
  7.     []->[]
  8.     |(x,y)::rest->if x=nodo then y::(vicini nodo rest)
  9.                   else if y=nodo then x::(vicini nodo rest)
  10.                   else vicini nodo rest
  11.  
  12. (*qua vorrei estrarre il colore da una lista associata in modo tale da poter effettuare un filtraggio
  13.     successivamente sul cammino , ma questa funzione non va
  14.     molto probabilmente quello che sto facendo รจ un errore concettuale*)
  15. let rec define_color valore=function
  16.     []->failwith "non esiste"
  17.     |(val,color)::rest-> if valore=val then color
  18.                        else define_color valore rest
  19.  
  20. exception NotFound
  21.  
  22. let path g colors lst start=
  23.     let rec from_node visited lst n=
  24.         if List.mem n visited then raise NotFound
  25.         else if lst=[n] then [n]
  26.         else n::(from_list (n::visited) (List.filter (<>colore) lst) (successori n g))
  27.     and from_list visited lst = function
  28.         []-> raise NotFound
  29.         |x::rest->  try from_node visited lst x
  30.                     with NotFound-> from_list visited lst rest
  31.     in from_node [] lst start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement