Prolog幂集谓词

Prolog幂集谓词,prolog,sicstus-prolog,powerset,Prolog,Sicstus Prolog,Powerset,我希望定义一个谓词功率集(X,p),当p是X的功率集时,它是真的。无论p是否接地,它都应该工作 因为您使用的是SICStus Prolog,所以您可以使用库(列表)中的subseq0(+Sequence,?SubSequence),这“在SubSequence是序列的子序列时是正确的,但可能是序列本身”(引用手册) 如果不允许使用库谓词,则可以实现中解释的subsetq0,为了完整起见,我在这里引用它(感谢gusbro) 到目前为止你试过什么?你在写哪个序言?这是家庭作业吗。这是一个我无法解决的

我希望定义一个谓词功率集(X,p),当p是X的功率集时,它是真的。无论p是否接地,它都应该工作

因为您使用的是SICStus Prolog,所以您可以使用库(列表)中的subseq0(+Sequence,?SubSequence),这“在SubSequence是序列的子序列时是正确的,但可能是序列本身”(引用手册)

如果不允许使用库谓词,则可以实现中解释的subsetq0,为了完整起见,我在这里引用它(感谢gusbro)


到目前为止你试过什么?你在写哪个序言?这是家庭作业吗。这是一个我无法解决的练习问题。到目前为止你有什么代码?@gusbro:没有,这是子序列和子字符串之间的区别。@false:你是对的。注释已删除(稍后将删除此注释)我刚刚注意到:序列和字符串通常同义使用,但子序列和子字符串不完全相同……不知何故,我习惯了这种命名约定,但它确实不太一致。
      ?- setof(X, subseq0([a,b,c],X), Xs).
      Xs = [[],[a],[a,b],[a,b,c],[a,c],[b],[b,c],[c]]
powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).