私が正しく、あなたの質問を理解していれば:あなたはととまたは述語に基づいて、組み合わせのリストを構築するために探している
。 cpsc219
を取る例
については
あなたは
math211
とmath271
または
math213
とmath271
を取る必要があるだろうmath271
を取るために
cpsc217
とcpsc219
を取る必要がありますインlinkこの例では、バイク用にbuild of materialsを使用し、実用的な質問のための資料の作成は前提条件と似ています。
この回答はDCGを使用しています。これはリストを作成しているためで、ほとんどがリストで作業するときはPrologであるためDCGが優先されます。
DCGルールはand
DCGルールしか示していません。コメントに私の質問に対する答えが表示された後、or
DCGルールが必要ですが、それらはバイクの例では指定されていません。だからレビューに
: プロローグ
and
では
,
(
,/2)と
;
(
;/2)で行うことができますが、より一般的に、複数のDCGルールで行われ
or
で行われます。ここで述べた
,
と
;
はリスト演算子ではなく、目標を扱う演算子です。
バイクの例and
drivechainのDCGルール。
drivechain --> crank, pedal, pedal, chain.
今or
DCGルールの欠落している例は、複数のDCGが使用
tire --> [dunlop].
tire --> [goodyear].
tire --> [yomoto].
又は実装ルール使用して実装;
tire -->
[dunlop]; [goodyear]; [yomoto].
and
DCG規則の実施例:
?- drivechain(X,[]).
X = [crank, pedal, pedal, chain] ;
false.
or
DCGルールの作業例:だから
?- tire(X,[]).
X = [dunlop] ;
X = [goodyear] ;
X = [yomoto] ;
false.
math211
またはmath213
DCG規則を必要とするmath271
とあなたの問題は次のようになりために:
math211 --> [math211].
math213 --> [math213].
math271 --> math211.
math271 --> math213.
?- math271(X,[]).
X = [math211] ;
X = [math213].
あなたは、これが割り当てであることを指摘しているので最初の投稿では宿題を意味するようにしていますので、あなたの質問に具体的な回答はしませんが、バイクの例を使って似たようなことを教えてください。
bike --> frame, drivechain, wheel, wheel.
wheel --> spokes, rim, hub, tire.
tire --> [dunlop].
tire --> [goodyear].
tire --> [yomoto].
drivechain --> crank, pedal, pedal, chain.
spokes --> [spokes].
crank --> [crank].
pedal --> [pedal].
chain --> [chain].
rim --> [rim].
hub --> [hub].
frame --> [frame].
?- bike(X,[]).
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear] ;
X = [frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto].
タイヤは、3つのブランドで構成されているにもかかわらず、タイヤと各タイヤとの二輪それぞれがあるので、9つの答えがあることに注意してくださいは、3つのブランドのいずれかになりますので、3 * 3 9
です
SWI-Prologの特定:
これらの答えの一部は...
と長く、切り捨てとなりますので...
せずに全体の答えを参照するには、ヘルプのために、このanswerを参照してください。言い換えれば、;false
をクエリに追加し、最初の答えの後にw
を押してから、スペースバーを押して回答を追加します。
syntactic sugarのように、除外DCGルール( - >)を述語(: - )として見るには、listing/1を使用してください。
?- listing(wheel).
wheel(A, E) :-
spokes(A, B),
rim(B, C),
hub(C, D),
tire(D, E).
true.
コメントに記載されているように、私は@falseがおそらくこれに答えるだろうとわかります。私は彼から学ぶので、自分の答えが自分のものよりも良いと思っていますが、誰かが私の答えに問題を見つけてそれを指摘すれば、私も学びます。
===================================
することができ、より精巧なバイクの例自転車や三輪車を作る。
bike --> type.
type --> bicycle.
type --> tricycle.
bicycle --> bicycle_frame, bicycle_drivechain, wheel, wheel.
tricycle --> tricycle_frame, tricycle_drive, wheel, wheel, wheel.
wheel --> spokes, rim, hub, tire.
bicycle_drivechain --> crank, pedal, pedal, chain.
tricycle_drive --> crank, pedal, pedal.
bicycle_frame --> [bicycle_frame].
tricycle_frame --> [tricycle_frame].
tire --> [dunlop].
tire --> [goodyear].
tire --> [yomoto].
spokes --> [spokes].
crank --> [crank].
pedal --> [pedal].
chain --> [chain].
rim --> [rim].
hub --> [hub].
?- bike(X,[]);false.
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear] ;
X = [bicycle_frame, crank, pedal, pedal, chain, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear, spokes, rim, hub, yomoto] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto, spokes, rim, hub, dunlop] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto, spokes, rim, hub, goodyear] ;
X = [tricycle_frame, crank, pedal, pedal, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto, spokes, rim, hub, yomoto] ;
false.
割り当てとして、自分で事実を追加するべきではないと思います。元の事実を投稿することはできますか? –
「前提条件の組み合わせ」を説明する異なる方法は、「材料の構築」です。 「Prolog Bill of Materials」を検索すると、[this](http://www.amzi.com/manuals/amzi/pro/ref_dcg.htm#DCGBillMaterials)が検索されます。正確な答えではありませんが、それはあなたをボールパークに入れます。 :) –
Prologを学ぶのを助けるかもしれない何かは、Prologで解決された非常に簡単な演習の例を見ることですが、別のプログラミング言語で解決されています。 [こちら](http://rosettacode.org/wiki/Category:Prolog) –