首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个简单的prolog程序

一个简单的prolog程序
EN

Stack Overflow用户
提问于 2015-07-06 10:59:25
回答 2查看 372关注 0票数 2

我想在Prolog中实现以下函数f(x,y)

代码语言:javascript
运行
复制
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

例如,

代码语言:javascript
运行
复制
f(2,-1) = 1*2 + 1*(-1) = 1
f(-2,-1) = (-1)*(-2) + (-1)*1 = 1
f(0,0) = 0*0 + 0*0 = 0

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-06 12:11:03

(假设定义y时有一个错误,y>0而不是y>=0)。您需要在输入vars和函数的结果之间定义一个关系。然后,Prolog可以用替换或no/false回答yes/true。

代码语言:javascript
运行
复制
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).

示例:

代码语言:javascript
运行
复制
?-f(2,-1,Answer).
Answer =1;
false.
票数 0
EN

Stack Overflow用户

发布于 2015-07-06 18:28:07

使用下面的配方如何?

代码语言:javascript
运行
复制
f(X,Y,Result) :-
   Result is abs(X) - abs(Y).

让我们运行一些查询:

代码语言:javascript
运行
复制
?- f(0,0,0).
true.

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

?- f(2,-1,1).
true.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31244133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档