algebra - Define a connectivity graph in Prolog -
i'm continuing researches in lattices , semilattices , having question.
basically, have relationlist of [a,b] pairs, means (a,b) edge. should know, graph formed relationlist 1-connectivity or not. way, have ordered graph, order of (a,b) important.
clear_link(x, y, relationlist) :- (member([x,y], relationlist) ; member([y,x], relationlist)), x =\= y. linked(x, y, relationlist) :- clear_link(x, y, relationlist), !. linked(x, y, relationlist) :- clear_link(x, z, relationlist), linked(z, y, relationlist). simple_connect(relationlist, e) :- forall((member(x, e), member(y, e), x < y), linked(x, y, relationlist)).
but, 6-element graph have stackoverflow.
?- simple_connect([[2,1],[2,3],[4,3],[4,5],[6,5]],[1,2,3,4,5,6]). error: out of local stack
am defining wrong?
i've correct some. it's fine
clear_link(x, y, relationlist) :- member([x,y], relationlist), x =\= y. linked(x, y, relationlist) :- clear_link(x, y, relationlist), !. linked(x, y, relationlist) :- clear_link(x, z, relationlist), linked(z, y, relationlist), !. simple_connect(relationlist, e) :- forall((member(x, e), member(y, e), x < y), linked(x, y, relationlist)). connective_graph(relationlist, e) :- findall(relation, ( member(x, relationlist), sort(x, relation) ),sortrelationlist), simple_connect(sortrelationlist, e).
and
?- connective_graph([[2,1],[2,3],[4,3],[4,5],[6,5]],[1,2,3,4,5,6]). true. ?- connective_graph([[2,1],[4,3],[4,5],[6,5]],[1,2,3,4,5,6]). false.
right answer (copy post)
connected(x, y, relationlist) :- (member([x,y], relationlist); member([y,x], relationlist)). path(x, y, relationlist, path) :- travel(x, y, relationlist, [x], reversepath), reverse(reversepath, path),!. travel(x, y, relationlist, point, [y | point]) :- connected(x, y, relationlist). travel(x, y, relationlist, visited, path) :- connected(x, z, relationlist), z =\= y, \+member(z, visited), travel(z, y, relationlist, [z|visited], path). connective_graph(relationlist, e) :- forall((member(x, e), member(y, e), x < y) ,path(x,y,relationlist,_)).
Comments
Post a Comment