这通常称为maplist/3,是Prolog prologue 的一部分。注意不同的参数顺序!
:- 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 有不同的属性,对应于the following constructs in functional languages,但要求所有列表的长度相同。请注意,Prolog 在zip/zipWith 和unzip 之间没有不对称性。目标maplist(C_3, Xs, Ys, Zs) 包含两者,甚至提供更一般的用途。
-
maplist/2 对应于all
-
maplist/3 对应于map
-
maplist/4 对应于zipWith,但也对应于unzip
-
maplist/5 对应于 zipWith3 和 unzip3
- ...