Predikát mapList

Velmi často potřebujeme provést se všemi prvky seznamu stejnou operaci -- aplikovat na ně stejnou funkci, a z takto získaných výsledků vytvořit opět seznam. Takové zpracování umožní predikát vyššího řádu mapList/3.

Predikát mapList(+Fun, +InputList, -OutputList) předpokládá, že $Fun$ je predikát arity $n\ge 2$$InputList$ seznam. Výstupní argument $OutputList$ je seznam stejné délky jako $InputList$, jehož $i$-tý člen $O_i$ je získán voláním predikátu $Fun$$n-1$-ním argumentem $I_i$$n$-tým argumentem $O_i$, kde $I_i$ je $i$-tý člen seznamu $InputList$. Definujme tedy predikát mapList/3 následovně:

mapList(Fun,[IH|IT],[OH|OT]):-
        :-@ [Fun,IH,OH],
        mapList(Fun,IT,OT).
mapList(_,[],[]).
Jeho použití ilustruje následující jednoduchý příklad:
?- mapList(append("Surname: "),["Kowalski","Warren"],R).
R = ["Surname: Kowalski","Surname: Warren"]
Yes



dvorka 2013-12-31