Predikát zip

Další relativně obecnou operací se seznamy je spojit dva stejně dlouhé seznamy do jediného tak, že se na stejnolehlé prvky aplikuje daný predikát a jím vydaná hodnota se umísťuje na příslušné místo ve výsledném seznamu:
zip(Pred,[IH1|IT1],[IH2|IT2],[OH|OT]):-
         :-@ [Pred,IH1,IH2,OH],
         zip(Pred,IT1,IT2,OT).
zip(_,_,[],[]).
zip(_,[],_,[]).
Je zřejmé, že zip(+Fun, +List1, +List2, +OutList) aplikuje predikát $Fun$ nejprve na oba první prvky a pak rekurzivně opakuje stejnou operaci pro zbytky obou seznamů. Pokud jsou seznamy různě dlouhé, zip/4 vrátí seznam s délkou kratšího z nich.

A jeden příklad použití predikátu zip/4:

?- zip(+,[1,2,3],[4,5,6],R).
R = [5,7,9]
Yes



dvorka 2013-12-31