2016-08-20 44 views
2

我有這些事實:證明X是前ŸProlog的

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

我嘗試寫一些Prolog的代碼,以證明before CS206 is CS100

這是我,但我得到一個堆棧溢出,因爲我的遞歸是搞砸了

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

'之前(X,X)'是真的嗎? 'X'在'X'之前? – lurker

+0

是的,你是對的,不應該在那裏 – PTN

回答

2

在序言中,以大寫字母開頭的原子將被單引號,否則它們是變量。所以CS101是一個變量,'CS101'是和原子。

所以你的事實應該寫成

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

添加下面的規則只

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

你應該能夠證明

before('CS206', 'CS100') 

是真實的。

相關問題