假设我有一个代表3元谓词的前两项的任意两个名单:Prolog的初学者:反向列表只有一次
[anna,berta,charlotte],[charles,bob,andy]
我想在第三列表(每个项目的第三项匹配如下:
[[anna,andy],[berta,bob],[charlotte,charles]]
基本上,这些项目按照顺序相反的方式进行匹配。为了配合以顺序方式的项目,我已经设计了下面的代码:
match([],[],[]).
match([A|At],[C|Ct],[[A,C]|Dt]):-match(At,Ct,Dt).
但是,这会给我的以下内容:
match([anna,berta,charlotte],[charles,bob,andy],X).
X=[[anna,charles],[berta,bob],[charlotte,andy]]
所以我需要以某种方式扭转第二个列表。到目前为止,我已经改变了代码如下:
match([],[],[]).
match([A|At],[C|Ct],[[A,B]|Dt]):-reverse([C|Ct],[B|Bt]),match(At,Bt,Dt).
但这将不断逆转与各循环中的第二个列表。结果将如下所示:
match([anna,berta,charlotte],[charles,bob,andy],X).
X=[[anna,andy],[berta,charles],[charlotte,bob]]
问题: 如何扭转第二只列出一次,所以实际结果匹配所需的吗?或者我的方法存在根本性缺陷?我是prolog的新手,目前受此阻碍。任何帮助,将不胜感激。
S(X)的使用干净的数据表示。 – repeat