假设我们有两个列表[1, 2, 3]
,[3, 2, 1]
,我们想要创建第三个列表,该列表等于对列表中每个对应的元素对应用二进制函数的结果。
类似:
f(x, y) =
-1, if x < y;
0, if x = y;
1 if x > y.
对于我们的例子,我们得到[-1, 0, 1]
。
我创建了代码:
f(A, B, C) :- ( A < B ->
C = -1
; A =:= B ->
C = 0
; C = 1
).
zip([A], [B], [C]) :- f(A, B, C).
zip([A | T1], [B | T2], [C | T]) :- f(A, B, C), zip(T1, T2, T).
工作原理:
?- zip([1,2,3], [3,2,1], X).
X = [-1, 0, 1] .
但我有一种感觉,我是在重新发明轮子。Prolog中有这个系统功能吗?
您可能希望使用maplist
谓词https://www.swi-prolog.org/pldoc/doc_for?object=maplist/4
就像这样
?- maplist(f,[1,2,3],[3,2,1],C).
C = [-1, 0, 1].