Ответ 1
Обычно это называется maplist/3
и является частью пролога Пролога. Обратите внимание на другой порядок аргументов!
:- meta_predicate maplist(2, ?, ?).
maplist(_C_2, [], []).
maplist( C_2, [X|Xs], [Y|Ys]) :-
call(C_2, X, Y),
maplist( C_2, Xs, Ys).
Разный порядок аргументов позволяет легко вложить несколько maplist
-goals.
?- maplist(maplist(test),[[1,2],[3,4]],Rss).
Rss = [[1,4],[9,16]].
maplist
входит в разные категории и соответствует следующие конструкции в функциональных языках, но требует, чтобы все списки имели одинаковую длину. Обратите внимание, что Prolog не имеет асимметрии между zip
/zipWith
и unzip
. Цель maplist(C_3, Xs, Ys, Zs)
включает и то, и другое предлагает более общие применения.
-
maplist/2
соответствуетall
-
maplist/3
соответствуетmap
-
maplist/4
соответствуетzipWith
, но такжеunzip
-
maplist/5
соответствуетzipWith3
иunzip3
- ...