Prolog 为什么子集(X,[1,2])不能生成所有子集?

Prolog 为什么子集(X,[1,2])不能生成所有子集?,prolog,Prolog,我正在学习Prolog,我的理解是,你可以经常问相反的问题,例如,不用memberX,用Y来问X是否在Y中,用它来生成包含X的所有列表 subset1[1,2]工作,但subsetX[1,2]出于某种原因返回X=[] 原因是什么 SWI Prolog您的问题是。。您的代码是子列表..抱歉,应该是子列表。有些谓词设计为在成功一次后剪切。例如,memberchk/2就是这样一个谓词,它是member/2的succeed once版本。如果第一个参数是第二个参数的子集,则SWI的subset/2实现成

我正在学习Prolog,我的理解是,你可以经常问相反的问题,例如,不用memberX,用Y来问X是否在Y中,用它来生成包含X的所有列表

subset1[1,2]工作,但subsetX[1,2]出于某种原因返回X=[]

原因是什么


SWI Prolog

您的问题是。。您的代码是子列表..抱歉,应该是子列表。有些谓词设计为在成功一次后剪切。例如,memberchk/2就是这样一个谓词,它是member/2的succeed once版本。如果第一个参数是第二个参数的子集,则SWI的subset/2实现成功,然后退出。有关子集/2,请参见。它说它使用memberchk/2来实现这一点。SWI中子集/2的定义不是关系。手册中的提示通常是间接的。也就是说,使用memberchk/2可以读取到此目的。memberchk/2本身不是一个关系。此外,它的文件必须阅读一些背景知识…我明白了。谢谢你的评论。