prolog-two列表,对相应的元素进行操作

时间:2016-09-27 13:00:10

标签: prolog

我擅长JAVA,现在我正在学习Prolog,这很难,我需要一些帮助......谢谢。 ABs的每个元素都是A-B形式的术语,其中A是As的对应元素,B是Bs的对应元素。

zip(As,Bs,ABs)

一些例子:

zip([1,2,3,4],[a,b,c,d],L). 
  L=[1-a,2-b,3-c,4-d].

zip(X,Y,[1-a,2-b,3-c]).
  X=[1,2,3],Y=[a,b,c]
zip([1,2,3,4],[a,b,c],L). 
 fail.
有人可以帮助我。谢谢..

我的实施:

zip(As,Bs,ABs) :-
   append(X,XS,As),
   append(Y,YS,Bs),

这就是我所做的......我迷失了......

1 个答案:

答案 0 :(得分:1)

使用append / 3效率不高。你可以简单地写一下:

zip([],[],[]).
zip([H|T],[H1|T1],[H-H1|T2]):-zip(T,T1,T2).

一些例子:

?- zip([1,2,3,4],[a,b,c,d],L). 
L = [1-a, 2-b, 3-c, 4-d].

?- zip(X,Y,[1-a,2-b,3-c]).
X = [1, 2, 3],
Y = [a, b, c].

?- zip([1,2,3,4],[a,b,c],L). 
false.