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).
请注意,base子句可以替换为基于空列表的子句:
pair_list([], []).
pair_list([E,Z|X],[[E,Z]|Y]) :- pair_list(X,Y).
另请注意,您的程序不适用于具有奇数项目的列表。为了解决这个问题,添加一个单独的基本子句,通过删除项目,与一些固定原子形成一对,或者在这种情况下做一些你觉得有用的东西来处理带有单个项目的列表。
以上是关于Prolog不会返回值的主要内容,如果未能解决你的问题,请参考以下文章