:- use_module(library(lambda)).
zip1(L1,L2,Z) :- scanl(\X^Y^_^[X,Y]^[X,Y],L1,L2,_,[_|Z]).
zip2(L1,L2,Z) :- maplist(\X^Y^[X,Y]^[X,Y],L1,L2,Z).
or better this one :
pair(X,Y,[X,Y]). zip(L1,L2,Z) :- maplist(pair,L1,L2,Z). ?- zip([1,2,3],[4,5,6],Z). Z = [[1, 4], [2, 5], [3, 6]].