2016-12-24 97 views
0

我已經寫了一個代碼,它應該計算加在一起的原子的數量,如:a + b + c + d(Z應該是4)。在序言中計算原子

我的代碼是迄今:

addition(X, X, 1, _) :- 
    atom(X). 
addition(X+Y, X1+Y1, ZZ, Z) :- 
    addition(X, X1, ZZ, Z), 
    addition(Y, Y1, ZZ, Z), 
    Z is ZZ + 1. 

我的問題是,代碼總是給我的號碼2.有人知道如何解決這個問題?

+1

你能提供例如(S)如何*應*的行爲,和它做什麼呢? (「代碼給出2」不是很清楚。) –

+0

Z應該是原子數,如果你要求加法(a + b + c + d,_,1,Z),程序應該說Z = 4,它說Z = 2。 – zer0kai

回答

1

主要問題是ZZ總是1(它唯一被綁定的東西);這是幸運的,因爲您要求它們對於兩個子添加都是相同的。你的第二個參數只是第一個參數的副本,並沒有任何用處(至少在這個問題中);同樣地,不清楚第三個參數的作用是什麼(第三個是基數情況下的計數,而第四個是遞歸的)。

清潔所有的,最多給人留下:使用此謂詞的

addition(X, 1) :- atom(X). 
addition(X+Y, ZZ) :- 
    addition(X, Z1), 
    addition(Y, Z2), 
    ZZ is Z1+Z2.