Prolog没有返回值

时间:2017-12-17 21:52:15

标签: prolog

我有以下代码:

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]]

1 个答案:

答案 0 :(得分:2)

你几乎就在那里:你需要做的就是将[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.

另请注意,您的程序无法使用包含奇数项目的列表。为了解决这个问题,添加一个单独的基本子句,通过删除项目,与一些固定原子形成一对,或者做一些你认为在这种情况下有用的其他东西来处理带有单个项目的列表。