2012-04-26 275 views
0

我希望定義一個謂詞powerset(X,P),當P是X的powerset時,它是真實的。無論P是否磨光都應該工作。Prolog powerset謂詞

+0

說明來意你到目前爲止嘗試過嗎?你正在研究哪個序言?這是功課嗎? – 2012-04-26 17:48:27

+0

STICStus。這是一個練習題,我無法解決問題。 – user1283759 2012-04-26 17:49:41

+0

到目前爲止你有什麼代碼? – 2012-04-26 17:51:27

回答

4

由於您使用SICStus Prolog,因此您可以使用庫(列表)中的subseq0(+ Sequence,?SubSequence),其中「當SubSequence是序列的子序列時爲真,但可能是序列本身」(引用手冊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]] 

如果您不允許使用庫謂詞可以實現subseteq0爲gnu Prolog powerset modification,我在這裏引用爲完整起見(與感謝gusbro

powerset([], []). 
powerset([H|T], P) :- powerset(T,P). 
powerset([H|T], [H|P]) :- powerset(T,P). 
+1

我剛剛注意到[這個奇怪的術語問題](http://en.wikipedia.org/wiki /Subsequence#Substring_vs._subsequence):一個序列和一個字符串通常被同義使用,但是一個子序列和一個子字符串是不完全相同的...... – false 2012-04-26 21:39:44

+1

不知何故,我習慣了這種命名約定,但事實上它不是很一致。 – 2012-04-27 08:49:06