Loops 如何在turboprolog中模拟循环
我想计算给定范围内奇数的总和,比如1到9是给定的输入。我的程序将显示1到9之间所有奇数的总和。虽然任务在理论上很简单,但作为turbo prolog的启动程序,我无法处理循环来计算总和。任何帮助都将不胜感激Loops 如何在turboprolog中模拟循环,loops,prolog,Loops,Prolog,我想计算给定范围内奇数的总和,比如1到9是给定的输入。我的程序将显示1到9之间所有奇数的总和。虽然任务在理论上很简单,但作为turbo prolog的启动程序,我无法处理循环来计算总和。任何帮助都将不胜感激 提前感谢。我不打算为您编写完整的解决方案,但我可以给出如何以一般方式“循环”求和的想法。Prolog中的循环通常通过递归完成。递归绕过了这样一个事实:Prolog不会让您在实例化同一谓词子句中的变量后重新实例化它(除非您回溯)。以下是ISO Prolog语法 sum_values(First
提前感谢。我不打算为您编写完整的解决方案,但我可以给出如何以一般方式“循环”求和的想法。Prolog中的循环通常通过递归完成。递归绕过了这样一个事实:Prolog不会让您在实例化同一谓词子句中的变量后重新实例化它(除非您回溯)。以下是ISO Prolog语法
sum_values(First, Last, Sum) :-
sum_values(First, Last, 0, Sum).
sum_values(First, Last, Sum, Sum) :-
First > Last.
sum_values(First, Last, Acc, Sum) :-
First =< Last,
NewAcc is Acc + First,
NewFirst is First + 1,
sum_values(NewFirst, NewAcc, Sum).
这稍微短一点,但是没有可以重构的尾部递归
您需要对您的问题进行修改(这些是我知道的,因为我对TP的一些语法只稍微熟悉一点):
- 用
替换=/2
(我认为TP使用is/2
进行表达式求值)=/2
- 您可能必须替换
=谢谢@Louger添加标记。@Louger:因为这个问题不是特定于Turbo Prolog的,所以最好删除它。@false标题是“如何在Turbo Prolog中模拟循环”。我把它理解为Turbo-Prolog-specific,这可能会有一个与“普通”Prolog完全不同的答案,因为Turbo-Prolog倾向于做许多不同的事情。初学者通常会包括他们正在使用的系统的名称:这很好,因为他们不知道这是否相关。我们知道。因此,我们应该相应地重新标记,以便将来的用户将从中获利。@false好吧,真的,我对Turbo Prolog不太了解,不知道它是否有自己的循环功能。我确实知道,从我对Turbo Prolog的了解来看,它与大多数其他Prolog几乎没有什么关联。具体地说,我不认为它具有其他Prolog实现所具有的
,foreach
,等等。因此,如果有人用interference
给出了一个很好的答案,那么它就不是turboprolog用户的答案。也许我在这方面完全错了,TP确实有。不过,就你的观点而言,我应该按照我的第一直觉来评论,那就是问:“它必须是Turbo Prolog吗?”。非常感谢,先生,这可能会对@Louger有所帮助foreach
sum_values(First, Last, 0) :- First > Last. sum_values(First, Last, Sum) :- First =< Last, NewFirst is First + 1, sum_values(NewFirst, Last, PartialSum), Sum is PartialSum + First.