2017-06-12 23 views
1

"add"述部で "pow"することは可能でしょうか(ちょうどX is Y + Z)?
私はこれますpow(X、Y、Z)<=> Z = X^Y with add

pow(0,1,1). 
pow(_,0,1). 
pow(X,Y,Z) :- Y1 is Y - 1, pow(X,Y1,Z1), Z is Z1 * X. 

をしかし、私はあなたがほかの面で乗算(mul/3)を書くことができます3^2 = 3 * 3 = 3 + 3 + 3

+1

いいえ追加の観点から乗算を書くことができます。 –

+0

'pow(X、Y、Z): - ZはX^Y + 0.'です。 – false

答えて

1

のように(ちょうど練習のために)「+」でそれを作ることもしたいです。同様:

pow(0,1,1). 
pow(_,0,1). 
pow(X,Y,Z) :- 
    Y > 1, 
    Y1 is Y - 1, 
    pow(X,Y1,Z1), 
    mul(Z1,X,Z). %% originally: Z is Z1 * X. 

mul(0,_,0). mul(I,A,R) :- I > 0, I1 is I-1, mul(I1,A,R1), R is R1 + A.

通常の基本的な運動は加え乗算、およびパワーペアノ数表現 predictatesを書くことです。この場合、追加は後継ファンクタで書かれます。

関連する問題