(如果返回是描述它的正确词语,我就不是,但这是我能找到的最好的词。)
我正在尝试在prolog中编写一个小程序,它使用add函数进行乘法运算。当我单独运行add或者甚至在函数test调用它时,结果是" Z =总和"例如:如果我运行add(2,3,Z),它将显示Z = 5。 我的问题是,当我打电话给我时,我无法做同样的事情。我找到的唯一解决方案是使用write,但这不是一回事。我尝试了很多东西,但大部分都没有编译,其余的都没有改变。有没有人知道如何做到这一点(" 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 :(得分:0)
我设法通过添加第4个参数来实现它。我不知道这是否是正确的方法,但它有效。
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).