filter/3 testuje všechny prvky zadaného
seznamu pomocí stejného predikátu a do výsledného seznamu vloží jen ty
prvky, které splňují danou podmínku. Provádí tedy klasickou filtraci:
filter(Cond,[IH|IT],Filtered):-
(:-@ [Cond,IH]
-> Filtered=[IH|OT]
; Filtered=OT),
filter(Cond,IT,OT).
filter(_,[],[]).
Predikát filter(+Cond, +Input, -Filtered) předpokládá,
že ?- filter(isOdd,[1,2,3],R). R = [1,3] Yes