私はPrologを初めて使用しており、組み込みの述語を使用せずに自然数に基本的な算術演算を実装する必要があります。Prolog - いくつかの基本的な算術演算の実装
私は自然数を表します。単項表記は、定数が0であることを意味し、再帰的後継関数はであり、です。 4 = s(s(s(s)(0))))]となる。私は上記の表記法に関して算術演算を実装します。
一連のルールがある:今
% nat(N)/1 ---> N is a natural number
nat(0).
nat(s(X)) :-
nat(X).
% add(X,Y,Z)/3 ---> Z = X + Y
add(X,0,X) :-
nat(X).
add(X,s(Y),s(Z)) :-
add(X,Y,Z).
% mult(X,Y,Z)/3 ---> Z = X * Y
mult(0,X,0) :-
nat(X).
mult(s(X),Y,Z) :-
mult(X,Y,XY),
add(XY,Y,Z).
、私は照会する場合:
RES = Sで(S(S(S(S:
?- mult(s(s(0)), s(s(s(0))), RES).
私はOKすべてを取得します(s(0))))))。
私は照会する場合:(?= 6月3日をお願いしたい)
?- mult(X, s(s(s(0))), s(s(s(s(s(s(0))))))).
私は無限ループで立ち往生してS.O.を取得
mult(s(X),Y,Z) :-
add(XY,Y,Z),
mult(X,Y,XY).
私はLinuxマシン上のSWI-プロローグ実行します。
は、私はそれが解決しないMULT述語における再帰呼び出しの順序を変更しても。
あなたのアドバイスをいただきありがとうございます。
% add(X,Y,Z)/3 ---> Z = X + Y
add(0,X,X) :-
nat(X).
add(s(X),Y,s(Z)) :-
add(X,Y,Z).
、その後MULT:
mult(s(X),Y,Z) :-
add(XY,Y,Z),
mult(X,Y,XY).
は、望ましい結果が得られます