Prolog:将2个列表压缩为一个



假设我们有两个列表[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].

最新更新