2016-08-20 1 views
2

ich diese Tatsachen haben:Beweisen X vor Y Prolog

before CS206 is CS121 
before CS121 is CS120 
before CS120 is CS101 
before CS101 is CS100 

ich einige Prolog-Code zu schreiben versuche, meine zu beweisen before CS206 is CS100

Das ist, was ich habe, aber ich bin immer einen Stapelüberlauf, weil Rekursion ist verkorkste

before(X,Y) :- before(X,Z), before(Z,Y). 
before(X,X). 
before(CS101,CS100). 
before(CS120,CS101). 
before(CS121,CS120). 
before(CS206,CS121). 
+3

'vor (X, X)' ist wahr? 'X' kommt vor' X'? – lurker

+0

Ja, du hast recht, das sollte nicht da sein – PTN

Antwort

2

In Prolog, Atome mit einem Großbuchstaben beginnen, sind einzelne zitiert werden, da sie sonst Variablen sind. Also CS101 ist eine Variable und 'CS101' ist und Atom.

So Ihre Fakten sollten als

before('CS101', 'CS100'). 
before('CS120', 'CS101'). 
before('CS121', 'CS120'). 
before('CS206', 'CS121'). 

Hinzufügen der folgenden Regel nur

before(X, Y) :- before(X, Z), before(Z, Y). 

geschrieben werden sollten Sie in der Lage sein zu beweisen, dass

before('CS206', 'CS100') 

wahr ist.