?-use_module(library(lists)). edge(a,b). edge(b,c). edge(a,c). edge(c,e). edge(b,f). edge(b,e). edge(d,f). edge(f,g). edge(g,h). edge(f,j). edge(j,k). edge(e,g). goal(k). goal(g). breadthFirst(In,[Z]):- setof(X,(member(X,In),goal(X)),Z), Z\=[], !. breadthFirst(In,[U,V|W]):- setof(Y, X^(member(X,In), edge(X,Y)),Set), breadthFirst(Set,[V|W]), setof(Son, Parent^(member(Parent,V), edge(Son,Parent),member(Son,In)), U). ?-breadthFirst([a,b],X), print(X), nl.