2016-04-30 16 views
0

とリストのリスト内の要素を見つけます。 たとえば、Q、wを持っていて、Z、rまたはE、rを取得する必要があります。 私は何とかプライオリティを持って、Zを含むタプルが欲しいと言っていますが、もし存在しなければ、私にE、rを与えてください。プロローグは次のように私はリストのリストを持っている好み

私が試した:

member([Q,w,Z,VB],[[Q,w,E,o],[Q,w,Z,r],[A,s,D,f]]). 

しかし、それは常に私にZ = E, VB = o

+1

大文字で始まる識別子は、定数ではなく変数です。あなたはもっと良い文字列を使うよ... –

答えて

0

を与えるあなたはアトムと変数間のPrologの違いを知っておく必要がありますまず、あなたは今すぐ
hereその構文についてを読むことができます大文字で始まるアトムのリストが必要な場合は、それらを一重引用符で囲む必要があります。そうでない場合、プロローグはそれらを変数として解釈します。
今、あなたはあなたの相談、あなたが得る次の結果の構文を修正した場合:

?- member(['Q',w,Z,VB],[['Q',w,'E',o],['Q',w,'Z',r],['A',s,'D',f]]). 

VB = o, 
Z = 'E' 
VB = r, 
Z = 'Z' 
false 

注意をどのように私は、単一引用符で囲まれたこのケースでZを除き、大文字で始まるすべての原子、および述語の第1引数にVBがあります。この場合、これらは変数として機能し、このケースを完了するために必要な原子をプロローグによってインスタンス化します。

+2

2番目の引数はよりコンパクトに '[" QwEo "、" QwZr "、" AsDf "]' – false

関連する問題