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 ).