Prolog中有条件的递归求和

问题描述 投票:0回答:1

我被要求在Prolog中编写一个程序,该程序必须能够对具有递归结构的对和奇数进行求和。该规则具有以下形式:

sum(N,PairSum,OddSum)

以N为参数给出的数字。例如:如果N = 5,则PairSum = 4 + 2和OddSum = 5 + 3 + 1

我的代码如下

summation(0,0,0).
summation(N,PairSum,OddSum) :- N>0,
                               N1 is N -1,
                               summation(N1,SumP,SumaI),
                               ((0 is mod(N,2)) ->PairSum is SumP + (N-2);
                                                  OddSum is SumI +(N -2)).

代码成功编译,运行时失败。例如,N = 5

sumsum(5,PairSum,OddSum)

我得到以下内容

错误:参数没有被充分实例化错误:输入:错误:[12] _9750是_9756 +(2-2)

recursion prolog swi-prolog
1个回答
0
投票

参考该代码时,您应该看到2个单例警告:SumaISumI在过程summation/3的第二个子句的正文中仅出现一次。

查看您的代码似乎您想使用相同的变量,因此将SumaI重命名为SumI。重新咨询代码后,您现在应该看不到任何单例警告。

© www.soinside.com 2019 - 2024. All rights reserved.