% reach.pl, uses table modes as supported by B-Prolog version 7.3 % by Neng-Fa Zhou, April 4, 2009 % http://www.cs.kuleuven.be/~dtai/events/ASP-competition/Benchmarks/Reachability.shtml :-include(base). solve(As):- assert_facts(As), query(X0,Y0), % a given fact in As reach(X0,Y0,P),!, output(P), abolish_all. solve(_):- format("UNSATISFIABLE~n"), abolish_all. :-table reach(+,+,-). reach(X,Y,[(X,Y)]):- edge(X,Y). reach(X,Y,[(X,Z)|P]):- edge(X,Z), reach(Z,Y,P). output([]). output([(X,Y)|P]):- format("reaches(~w,~w). ",[X,Y]), output(P). test:- solve([edge(1,3),edge(3,4),edge(3,5),edge(4,2),edge(2,5),query(1,2)]).