:- use_module(library(lists)). knows(P1, P2) :- knows(P1, P2, []) . knows(P1, P2, V) :- knows_l1(P1, P2), \+ memberchk((P1, P2), V) . knows(P1, P2, V) :- knows_l1(P1, OtherPerson), \+ memberchk((P1, OtherPerson), V), knows(OtherPerson, P2, [(P1, OtherPerson) | V]) . 1.0 :: knows_l1(0, 2) . 1.0 :: knows_l1(0, 3) . 1.0 :: knows_l1(0, 4) . 1.0 :: knows_l1(1, 0) . 1.0 :: knows_l1(1, 2) . 1.0 :: knows_l1(1, 3) . 1.0 :: knows_l1(1, 4) . 1.0 :: knows_l1(2, 0) . 1.0 :: knows_l1(2, 1) . 1.0 :: knows_l1(2, 3) . 1.0 :: knows_l1(2, 4) . 1.0 :: knows_l1(3, 0) . 1.0 :: knows_l1(3, 1) . 1.0 :: knows_l1(3, 2) . 1.0 :: knows_l1(3, 4) . 1.0 :: knows_l1(4, 0) . 1.0 :: knows_l1(4, 1) . 1.0 :: knows_l1(4, 2) . 1.0 :: knows_l1(4, 3) . query(knows(0, 1)) .