1

我正在尝试在 Prolog 中进行一元和二元算术运算。

一元数定义为bot=0s(X)=x+1,例如3s(s(s(bot)))

二进制数表示为一系列Zs 和Os,当Z数字0O数字1从最低有效位到最高有效位时。例如4z(z(o(bot))).

当我使用形式的谓词power(z(o(bot),z(o(bot)),Result). 但是当我尝试类似power(X,z(o(bot)),z(o(o(bot))) ).它崩溃的东西时,一切都很好。

suc(bot,o(bot)).
suc(o(X),z(Res)):-suc(X,Res).
suc(z(X),o(Res)):-X=Res.

add(bot,X,X).
add(s(X),Y,Res):-add(X,s(Y),Res).
add(X,Y,Res):-suc(A,X),
    suc(Y,B),
    add(A,B,Res).

multiply(bot,_,bot).
multiply(_,bot,bot).
multiply(X,Y,Res):-suc(A,X),
        multiply(A,Y,NewRes),
        add(Y,NewRes,Res).
multiply(s(X),Y,Res):-multiply(X,Y,NewRes),
    add(Y,NewRes,Res).

power(_,bot,s(bot)).
power(X,o(bot),X).
power(X,s(Y),Res):-power(X,Y,NewRes),
    multiply(X,NewRes,Res).
power(X,Y,Res):-suc(A,Y),
        power(X,A,NewRes),
        multiply(X,NewRes,Res).
4

0 回答 0