/**Use: traverse([Conclusion]). ?- traverse([i_am_happy]). Yes nt non-terminating t terminating **/ %%fact([i,am,happy],nt). fact([i,eat,apple],t). fact([apple,makes_me,happy],t). %%fact([apple,gives,energy],t). traverse([Subject,_,Object]) :- fact([Subject,_,Object1],T), traverse1([Subject,_,Object1],T), fact([Subject2,_,Object],T1), traverse1([Subject2,_,Object],T1). traverse1(Proposition,nt) :- traverse(Proposition). traverse1(_,t). /** implies(i_am_happy, [i_have_an_apple, i_can_eat_the_apple]). implies(i_can_eat_the_apple, the_apple_gives_me_energy). fact(i_have_an_apple). fact(the_apple_gives_me_energy). traverse(Conclusion) :- traverse1([Conclusion]). traverse1([]). traverse1([Antecedent|Antecedents]) :- implies(Antecedent,Consequent), traverse1(Consequent), traverse1(Antecedents). traverse1([Antecedent|Antecedents]) :- fact(Antecedent), traverse1(Antecedents). traverse1(Consequent) :- fact(Consequent). **/