Prolog规则是“true”而不是将其作为参数返回

时间:2018-06-16 21:35:51

标签: prolog

我有拼贴的作业,为sub(Sublist, List)的所有Sublist建立关系List,以便Sublist中成员的顺序顺序相同List中的成员。例如:

?- sub(X, [1,2,3]).

满意

X=[1,2,3];
X=[1,2];
X=[1,3];
X=[1];
X=[2,3];
X=[2];
X=[3];
X=[].

我已经建立了这种关系,当我查询?- sub(X, [1,2,3]).时,我只得到X这些List的前缀子列表作为回复:

X=[];
X=[1];
X=[1,2];
X=[1,2,3].

但是当我查询?- sub([2], [1,2,3]).[1,2,3]的任何其他子集作为Subset参数时,我得到true作为答案。怎么会发生这种情况?难道Prolog不会想要返回所有满足这种关系的Subset吗?

我无法发布代码,因为如果我的班级中的某个人会复制代码,那么我的作业就会失败。感谢。

1 个答案:

答案 0 :(得分:0)

其中一个规则中的一个术语是X\=Y,用于2个参数XY。我删除了此检查,而是在此递归规则中添加了一个参数{{ {1}} 1 = XY。我不知道为什么,也许Prolog并不热衷于检查冲动中的原始关系(例如0),但这解决了这个问题。