如何使prolog程序返回它计算的值

时间:2017-07-19 07:03:25

标签: prolog

(如果返回是描述它的正确词语,我就不是,但这是我能找到的最好的词。)

我正在尝试在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).

1 个答案:

答案 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).