首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Prolog编写求和程序

用Prolog编写求和程序
EN

Stack Overflow用户
提问于 2021-02-28 23:07:35
回答 2查看 97关注 0票数 2

有人能解释一下这段代码是怎么工作的吗?我是Prolog的新手,像Prolog程序员一样思考有问题。当您输入一个后跟逗号和任何变量名的数字时,它会给出该数字的总和

代码语言:javascript
复制
sum_to(1,1) :- !.
sum_to(N, R) :- N1 is N-1, sum_to(N1,TR), R is TR + N.

所以求和

_

to(4,N)表示N= 10。

EN

Stack Overflow用户

发布于 2021-02-28 23:44:53

这是一个非常命令式的程序,实现了用Prolog编写的归纳定义。

它与两个数字相关:

在第一个子句中,1与1相关。指示解释器应停止在和中查找进一步的解决方案。

_

to/2谓词。

如果第一个子句不匹配(因为调用中的任何参数与1不同),则检查第二个子句。

现在我们简单地说:

将N1计算为N-1

使用N1进行递归调用,并在TR中获取一个值,以便N1和TR通过

(即TR应该是所有整数的总和,直到N1)。一旦我们得到它,我们就计算R为TR和N的和。

总和

_

to关系是正确的,因为第一个参数是1。

总和

_

在N处的关系是正确的,如果和

_

对于N-1,to关系是正确的。

如果递归调用在每次调用时“使某些东西变得更小”,并且最终会达到一个最小值,则计算将终止。它确实在每次调用时使N更小,最终将达到1。(除非使用0 N或更小的值调用此谓词。然后:灾难!)

看起来不错。

(顺便说一句,归纳定义倾向于从常数x到+oo,即“向上”;上面我说的是从任何N向下到1的正确性。我这样做是合理的吗?)

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66410448

复制
相关文章

相似问题

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