2016-04-30 7 views
0

Ich habe Liste von Listen wie:Prolog Element in der Liste der Listen mit Vorliebe finden

L = [[Q,w,E,],[Q,w,Z,r],[A,s,D,f]] 

Ich kenne den ersten beiden und ich brauche den Rest zu erhalten. Zum Beispiel habe ich Q, w und ich brauche Z, r oder E, r. Ich würde gerne sagen, dass mit Priorität ich immer wollen, dass Touple Z enthalten, aber wenn nicht existiert, gib mir E, r.

Ich habe versucht:

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

Aber das macht mir immer Z = E, VB = o

+1

Beachten Sie, dass Bezeichner, die mit einem Großbuchstaben beginnen, Variablen sind, keine Konstanten. Du verwendest besser Strings ... –

Antwort

0

Zuerst müssen Sie den Unterschied in Prolog zwischen einem Atom und einer Variable kennen, können Sie über ihre Syntax here
Jetzt lesen Wenn Sie eine Liste von Atomen haben möchten, die mit einem Großbuchstaben beginnen, müssen Sie sie in einfache Anführungszeichen setzen, andernfalls interpretiert Prolog sie als Variablen.
Nun, wenn Sie die Syntax Ihres beraten zu beheben, werden Sie das folgende Ergebnis:

?- 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 

Beachten Sie, wie in diesem Fall, den ich in Apostroph eingeschlossen alle Atome mit einem Großbuchstaben beginnen, mit Ausnahme von Z und VB im ersten Argument des member/2 Prädikats, weil sie in diesem Fall als Variablen fungieren, die durch Prolog mit den Atomen, die zur Vervollständigung dieses Falls benötigt werden, instanziiert werden.

+2

Mit ': - set_prolog_flag (double_quotes, chars) .' liest das zweite Argument kompakter '[" QwEo "," QwZr "," AsDf "]' – false