我有以下代码:

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.

另请注意,您的程序将无法使用包含奇数个项目的列表。为了解决此问题,请添加一个单独的基本子句来处理包含单个项目的列表,方法是删除该项目,与某个固定原子成对,或者执行其他在此情况下有用的操作。

07-28 01:58
查看更多