[Mancano i commenti]



find_regions_aux [] acc = acc

find_regions_aux ((x,y):rs) acc 
                            | elem y acc && elem x acc =  find_regions_aux rs acc 
                            | elem x acc               =  find_regions_aux rs (y:acc) 
                            | elem y acc               =  find_regions_aux rs (x:acc) 
                            | otherwise                =  find_regions_aux rs (x:(y:acc)) 


find_regions list = find_regions_aux list []



find_regionsII [] = []

find_regionsII ((x,y):ps) 
                     | (elem x res) && (elem y res) =  res
                     |  elem x res                  =  (y:res)        
                     |  elem y res                  =  (x:res)
                     |  otherwise                   =  (x:(y:res))
                  where res = find_regionsII ps


mygraph = [(1,2),(1,3),(1,4),(1,5),(2,3),(2,4),(3,4),(4,5),(8,9),(9,10)]




find_regions([],[]).

find_regions([[X,Y]|L],Z) :- find_regions(L,Z), member(X,Z), member(Y,Z),!.

find_regions([[X,Y]|L],[Y|Z]) :- find_regions(L,Z), member(X,Z), \+member(Y,Z),!.

find_regions([[X,Y]|L],[X|Z]) :- find_regions(L,Z), \+member(X,Z), member(Y,Z),!.

find_regions([[X,Y]|L],[X,Y|Z]) :- find_regions(L,Z).




ESERCIZIO: Potrebbe sembrare che in realta' anche la seguente soluzione
funzioni.

find_regions([],[]).

find_regions([[X,Y]|L],Z) :- find_regions(L,Z),!, member(X,Z), member(Y,Z).

find_regions([[X,Y]|L],[Y|Z]) :- find_regions(L,Z), !, member(X,Z), \+member(Y,Z).

find_regions([[X,Y]|L],[X|Z]) :- find_regions(L,Z), !, \+member(X,Z), member(Y,Z).

find_regions([[X,Y]|L],[X,Y|Z]) :- find_regions(L,Z).

In realta' non e' cosi', perche? 

p
