一个简单的序言程序
A simple prolog program
我想在 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
有人可以帮忙吗?
(假设您在定义 y 时有错字,y>0 而不是 y>=0。)
您需要定义输入变量和函数结果之间的关系。 Prolog 然后可以用替换或 no/false 来回答 yes/true。
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.
使用下面的公式怎么样?
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
中实现以下功能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
有人可以帮忙吗?
(假设您在定义 y 时有错字,y>0 而不是 y>=0。) 您需要定义输入变量和函数结果之间的关系。 Prolog 然后可以用替换或 no/false 来回答 yes/true。
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.
使用下面的公式怎么样?
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