這很簡單,但似乎無法把握它,我有這些「顏色」簡單的Prolog SETOF
color(blue).
color(red).
color(white).
使用setof
我需要得到這些顏色的所有可能的組合列表中的 這將是巨大的,如果你可以提供一個簡要的解釋。我想這個查詢
setof(X,color(X),Colors).
這顯然
感謝
這很簡單,但似乎無法把握它,我有這些「顏色」簡單的Prolog SETOF
color(blue).
color(red).
color(white).
使用setof
我需要得到這些顏色的所有可能的組合列表中的 這將是巨大的,如果你可以提供一個簡要的解釋。我想這個查詢
setof(X,color(X),Colors).
這顯然
感謝
我想你的意思是這與組合:
?- setof((X,Y), (color(X), color(Y)), ColorsCombined).
ColorsCombined = [ (blue, blue), (blue, green), (blue, red), (green, blue), (green, green), (green, red), (red, blue), (red, green), (..., ...)].
還是你的意思了集?
subset([Element|Set], [Element|Subset]):- subset(Set, Subset).
subset([_|Set], Subset):- subset(Set, Subset).
subset([], []).
superset(Set, Superset) :- setof(Subset, subset(Set, Subset), Superset).
這是輸出:
?- superset([1,2,3], Superset).
Superset = [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]].
你的意思是這樣嗎?
all_permutations(Permutations) :-
% get all colors into a list
setof(Color, color(Color), One_Color_List),
% find all combinations using permutation/2 on One_Color_List
setof(Permutation,
permutation(One_Color_List, Permutation),
Permutations).
結果:
?- all_permutations(X).
X = [[blue, red, white], [blue, white, red], [red, blue, white], [red, white, blue], [white, blue, red], [white, red, blue]].
訣竅是讓事實轉化爲列表 - 像你一樣,然後用置換/ 2生成列表的所有排列。
如果這就是你想要的..不清楚...
其實是我想要的,謝謝! – user3241846
謝謝,它基本上是我想要的!爲了進一步理解,我使用了這個查詢'setof((X,Y,Z),(color(X),color(Y),color(Z)),ColorsCombined)''。並得到了三個項目的圖案,但我想要列出一個列表。例如ColorsCombined = [(紅色,紅色,紅色),...]以及我想要的是ColorsCombined [[紅色,紅色,紅色],....]我需要更改什麼? – user3241846
將括號從()更改爲[] – User