我有以下代码:
pair_list([X,Y],[[X,Y]]).
pair_list([E,Z|X],[K|Y]):- [E,Z]==K, pair_list(X,Y).
当我运行它时,它会为
?- pair_list([1, 2, 3, 4, 5, 6], [[1, 2], [3, 4], [5, 6]]).
true ;
但是当我跑步时
?- pair_list([1,2, 3, 4, 5, 6], X).
我刚得到
false.
我的问题是为什么我没有得到
X=[[1, 2], [3, 4], [5, 6]]
最佳答案
您几乎在那里:您需要做的就是将[E,Z]
移入头部,消除K
:
pair_list([X,Y],[[X,Y]]).
pair_list([E,Z|X],[[E,Z]|Y]) :- pair_list(X,Y).
Demo 1.
请注意,base子句可以基于空列表替换为一个:
pair_list([], []).
pair_list([E,Z|X],[[E,Z]|Y]) :- pair_list(X,Y).
Demo 2.
另请注意,您的程序将无法使用包含奇数个项目的列表。为了解决此问题,请添加一个单独的基本子句来处理包含单个项目的列表,方法是删除该项目,与某个固定原子成对,或者执行其他在此情况下有用的操作。