2017-07-19 39 views
0

值(如果回報來形容它正確的字我不SUR,但是這是最好的一個,我可以找到。)如何使一個Prolog程序返回它計算

我想寫一個prolog中的一個小程序,它使用函數add來進行乘法運算。當我自己運行add或者甚至在函數測試中調用結果時,結果是「Z = sum」ex:如果我運行add(2,3,Z),它將顯示Z = 5。 我的問題是,當我打電話給mult時,我無法讓它做同樣的事情。我發現的唯一解決方案是使用寫入,但這不是一回事。我嘗試了很多東西,但其中大部分都沒有編譯,其餘部分都沒有改變。有人知道我怎麼能做到這一點(「Z =產品」)?一般情況下,爲什麼要這樣做(返回)?

謝謝

add(X,Y,Z) :- 
    Z is X + Y. 

mult(X,Y,Z1):- 
    multiply(X,Y,0). 

multiply(_,0,_):- 
    write(0). 
multiply(0,_,Z):- 
    write(Z). 
multiply(X,Y,Z):- 
    X > 0, 
    add(Y,Z,Z1), 
    X1 is X - 1, 
    multiply(X1,Y,Z1). 
multiply(X,Y,Z):- 
    Y < 0, 
    X1 is abs(X), 
    Y1 is abs(Y), 
    multiply(X1,Y1,Z). 
multiply(X,Y,Z):- 
    Y1 is Y * -1, 
    add(Y1,Z,Z1), 
    X1 is X + 1, 
    multiply(X1,Y,Z1). 


test(X,Y,Z1):- 
    add(X,Y,Z1). 
+0

'乘(X,Y,Z1): - Z1爲X * Y' –

+0

'MULT(X,Y,Z1): - 乘(X,Y,0).'請問這個規則意思?這似乎不合邏輯。 – lurker

+0

那麼用戶稱它爲mult(2,3,Z),其中Z應該是存儲產品的變量。所以我將Z初始化爲零,以便向其中添加Y X次並獲得產品。 – itachi737

回答

0

我設法得到它的工作通過增加第四個參數。我不知道這是否是正確的方法,但它的工作原理。

mult(X,Y,Z):- 
    multiply(X,Y,0,Z). 

multiply(_,0,_,Z):- 
    Z is 0. 
multiply(0,_,Z1,Z):- 
    Z is Z1. 
multiply(X,Y,Z1,Z):- 
    X > 0, 
    add(Y,Z1,Z2), 
    X1 is X - 1, 
    multiply(X1,Y,Z2,Z). 
multiply(X,Y,Z1,Z):- 
    Y < 0, 
    X1 is abs(X), 
    Y1 is abs(Y), 
    multiply(X1,Y1,Z1,Z). 
multiply(X,Y,Z1,Z):- 
    Y1 is Y * -1, 
    add(Y1,Z1,Z2), 
    X1 is X + 1, 
    multiply(X1,Y,Z2,Z).