Обычно это называется 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
-го целей.
?- maplist(maplist(test),[[1,2],[3,4]],Rss).
Rss = [[1,4],[9,16]].
maplist
входит в различные арты и соответствует следующим конструкциям на функциональных языках , но требует, чтобы все списки были одинаковой длины. Обратите внимание, что у Пролога нет асимметрии между zip
/ zipWith
и unzip
. Цель maplist(C_3, Xs, Ys, Zs)
включает в себя оба и даже предлагает более общее использование.
maplist/2
соответствует all
maplist/3
соответствует map
maplist/4
соответствует zipWith
, но также unzip
maplist/5
соответствует zipWith3
и unzip3
- ...