foldL/4
a foldR/4
.
Predikát foldL(+Fun, +List, +IniAcc, -Acc)
, kde je název
predikátu arity a je seznam s položkami, provádí
akumulovaný průchod seznamu zleva s postupnou aplikací . Raději
než slovně vyjádříme jeho výsledek schematicky a to takto:
foldL(f,i,[a1,a2,...,an],X)
X=f(...(f(f(i,a1),a2)...),an)
Samotný predikát je implementován pomocí akumulátoru:
foldL(F,InVal,[I|IT],Out):- :-@ [F,InVal,I,OutVal], foldL(F,OutVal,IT,Out). foldL(_,Out,[],Out).
Predikát foldR(+Fun, +List, +IniAcc, -Acc)
má stejné argumenty
jako foldL/4
. Aplikuje však danou operaci s levou asociativitou:
foldR(f,i,[a1,a2,...,an],X)
X=f(a1,f(a2,...,f(an,i)...))
foldR( F, InVal, [I|IT], Out ):- foldR( F, InVal, IT, OutVal ), :-@ [F,I,OutVal,Out]. foldR( _, InVal, [], InVal ).