Predikát filter

Predikát vyššího řádu 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 $Cond$ je predikát arity $a\ge 1$$Input$ seznam. Výstupní argument $Filtered$ je seznam, který je vytvořen z těch členů seznamu $Input$, které splňují podmínku $Cond$. Příklad:
?- filter(isOdd,[1,2,3],R).
R = [1,3]
Yes



dvorka 2013-12-31