一个简单的prolog程序

一个简单的prolog程序,prolog,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 任何人都可以提供帮助?(假设您在定义y时有输入错误,y>0而不是y>=0。) 您需要定义输入变量和函数结果之间的关系。Prolog然后可以用替换或否/假来回答是/真 f(X,Y,An

我想在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
任何人都可以提供帮助?

(假设您在定义y时有输入错误,y>0而不是y>=0。) 您需要定义输入变量和函数结果之间的关系。Prolog然后可以用替换或否/假来回答是/真

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(X,Y,Result) :-
   Result is abs(X) - abs(Y).
让我们运行一些查询:

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

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

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

不应该比这一行复杂得多:

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

Prolog不是这样工作的。Prolog不是功能性的,Prolog是逻辑性的。所以你必须定义正确的命题。然后你可以问Prolog这个问题,他会尝试给出一个答案(是或否),如果回答是肯定的话,他会用变量替换。但你不能这样简单地问“学我那门语言”。所以,当你陷入正在编写的代码的平静时,它会帮助你。@EmrysMyrooin:我不这么认为,事实上,我们在Prolog中仍然可以有这样一个函数,一个例子是两个数字相加的问题。Prolog根据其数据库中的事实和规则推断事实,而不是简单地回答是非问题。@EmrysMyrooin:您可以在这里看到几个Prolog示例。您可以在Prolog中保留一个列表,而不仅仅是查询是非问题,对吗?是的,这就是我所说的“变量替换”的意思-)我的评论不太清楚。但这并不能改变一个事实,那就是他必须寻找一点,尝试一些东西,如果他自己找不到解决方案,他就会回来
?- f(0,0,0).
true.

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

?- f(2,-1,1).
true.
f(X,Y,Z) :- Z is sign(X)*X + -sign(Y)*Y