を発行し、そのような私たち:プロローグ(Sicstus) - SETOFとfindAllの組み合わせは、ルートのセット与えられた駅がある考える
route(TubeLine, ListOfStations).
route(green, [a,b,c,d,e,f]).
route(blue, [g,b,c,h,i,j]).
...
Iは共通で、特定の駅を持っている行の名前を検索するために必要なのです。結果は、反復されないステーションで順序付けされなければならず、結果がなければ空のリストを返す必要があります。だから、
| ?- lines(i, Ls).
を照会することは与えるべきである:
Ls = [blue,red,silver] ? ;
no
を私は次のことをやってみました:
lines(X, L) :- setof(L1, findall(W, (route(W, Stations),member(X, Stations)),L1), L).
しかし、それは答えとして、以下を提供します:
Is = [[blue,silver,red]];
no
したがって、二重ブレースで順序付けられていない。 findallだけを使ってみましたが、結果は順序付けされていません。私はソート関数を書いてそれを渡すことができたことを知っていますが、この例ではfindallとsetofだけを使用することが可能かどうか疑問に思っていましたか?
私は見る!あなたの答えをありがとう!あなたはそのような行動を実践することができるリソースを知っていますか? – qwerty
[今すぐ学ぶ]の[第11章](http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlch11)は読む価値があります。具体的には、[setof/3 section] (http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse49) – CapelliC