Prolog不会返回值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]]

答案

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

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

以上是关于Prolog不会返回值的主要内容,如果未能解决你的问题,请参考以下文章

Prolog 中的返回值

在 Prolog 中递归后返回一个值

在 Prolog 中使用约束和排列解决难题

gerrit prolog提交规则条件检查

自定义 Prolog 算术函数

Prolog 否定和逻辑否定