use*_*759 2 prolog powerset sicstus-prolog
我希望定义一个谓词powerset(X,P),当P是X的powerset时,它是真的.无论P是否为地,都应该工作.
由于您使用SICStus Prolog,您可以使用库(列表)中的subseq0(+ Sequence,?SubSequence),"当SubSequence是Sequence的子序列时,它是真的,但可能是序列本身"(从手册http://引用)www.sics.se/sicstus/docs/4.0.2/html/sicstus/lib_002dlists.html).
?- setof(X, subseq0([a,b,c],X), Xs).
Xs = [[],[a],[a,b],[a,b,c],[a,c],[b],[b,c],[c]]
Run Code Online (Sandbox Code Playgroud)
如果你不允许使用库谓词,你可以按照gnu Prolog powerset修改中的解释实现subseteq0,为了完整起见,我在这里引用(感谢gusbro)
powerset([], []).
powerset([H|T], P) :- powerset(T,P).
powerset([H|T], [H|P]) :- powerset(T,P).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4943 次 |
| 最近记录: |