% map for 2-ary predicates map(_P, [], []). map(P, [A | X], [B | Y]) :- call(P, A, B), map(P, X, Y). p(X, Y) :- Y is X+1. test :- map(p, [1, 2, 3], Z), write(Z), nl.