一个简单的prolog程序

时间:2015-07-06 10:59:25

标签: prolog

我想在Prolog

中实现以下函数f(x,y)
f(x,y) = a*x+b*y
where a = 1 if x > 0; a = -1 if x < 0; a = 0 if x = 0
and b = -1 if y > 0; b = 1 if y < 0; b = 0 if y = 0

例如,

f(2,-1) = 1*2 + 1*(-1) = 1
f(-2,-1) = (-1)*(-2) + (-1)*1 = 1
f(0,0) = 0*0 + 0*0 = 0

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:1)

如何使用以下配方?

f(X,Y,Result) :-
   Result is abs(X) - abs(Y).

让我们运行一些查询:

?- f(0,0,0).
true.

?- f(-2,-1,1).
true.

?- f(2,-1,1).
true.

答案 1 :(得分:0)

(假设你在定义y时有拼写错误,y> 0而不是y&gt; = 0。) 您需要定义输入变量和函数结果之间的关系。然后Prolog可以用替换回答yes / true或者没有/ false。

f(X,Y,Answer):-
    a_is(X,A),
    b_is(Y,B),
    Answer is A*X+B*Y.

a_is(X,1):-
    X>0.
a_is(X,-1):-
    X<0.
a_is(0,0).

b_is(Y,1):-
    Y<0.
b_is(Y,-1):-
    Y>0.
b_is(0,0).

示例:

?-f(2,-1,Answer).
Answer =1;
false.

答案 2 :(得分:0)

不应该比这个单线更复杂:

f(X,Y,Z) :- Z is sign(X)*X + -sign(Y)*Y