我被要求在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)
参考该代码时,您应该看到2个单例警告:SumaI
和SumI
在过程summation/3
的第二个子句的正文中仅出现一次。
查看您的代码似乎您想使用相同的变量,因此将SumaI重命名为SumI。重新咨询代码后,您现在应该看不到任何单例警告。