Procedimiento de mapa Prolog que aplica el predicado a los elementos de la lista
map-function meta-predicate (1)
Esto generalmente se llama maplist/3 y es parte del prólogo de Prolog . ¡Note el diferente orden de los argumentos!
:- meta_predicate maplist(2, ?, ?).
maplist(_C_2, [], []).
maplist( C_2, [X|Xs], [Y|Ys]) :-
call(C_2, X, Y),
maplist( C_2, Xs, Ys).
El orden diferente de los argumentos le permite jerarquizar fácilmente varios maplist mapas.
?- maplist(maplist(test),[[1,2],[3,4]],Rss).
Rss = [[1,4],[9,16]].
maplist viene en aries diferentes y corresponde a las siguientes construcciones en lenguajes funcionales , pero requiere que todas las listas tengan la misma longitud. Tenga en cuenta que Prolog no tiene la asimetría entre zip / zipWith y unzip . Una lista de maplist(C_3, Xs, Ys, Zs) objetivos maplist(C_3, Xs, Ys, Zs) subsume ambos e incluso ofrece usos más generales.
-
maplist/2corresponde aall -
maplist/3corresponde almap -
maplist/4corresponde azipWithpero tambiénunzip -
maplist/5corresponde azipWith3yunzip3 - ...
¿Cómo se escribe un map(List, PredName, Result) procedimiento Prolog map(List, PredName, Result) que aplica el predicado PredName(Arg, Res) a los elementos de List y se devuelve el resultado en la lista Result ?
Por ejemplo:
test(N,R) :- R is N*N.
?- map([3,5,-2], test, L).
L = [9,25,4] ;
no