我有拼贴的作业,为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
吗?
我无法发布代码,因为如果我的班级中的某个人会复制代码,那么我的作业就会失败。感谢。
答案 0 :(得分:0)
其中一个规则中的一个术语是X\=Y
,用于2个参数X
和Y
。我删除了此检查,而是在此递归规则中添加了一个参数{{ {1}} 1
= X
和Y
。我不知道为什么,也许Prolog并不热衷于检查冲动中的原始关系(例如0
),但这解决了这个问题。