假設我有一個代表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