/** ?- traverse([i,am,happy],[[[i,eat,apple],t],[[apple,makes_me,happy],t]]). Yes **/ /** traverse(+Proposition,+Facts) Proposition is form [Subject,Verb,Object] Facts is in form of list of [Proposition,Terminator] where Terminator is nt - Proposition has a reason t - Proposition has no reason **/ traverse([Subject,_,Object],Facts) :- member([[Subject,_,Object1],T],Facts), traverse1([[Subject,_,Object1],T],Facts), member([[Subject2,_,Object],T1],Facts), traverse1([[Subject2,_,Object],T1],Facts). /** traverse1([Proposition,Terminator],Facts) where terms are described as for traverse/1. **/ traverse1([Proposition,nt],Facts) :- traverse(Proposition,Facts). traverse1([_,t],_).