Prolog找到两个整数之间的整数之和

时间:2016-12-09 19:28:18

标签: prolog

我正在使用GNU-Prolog尝试编写一个接受NM正整数的程序,并对NM之间的所有数字求和,包括{{1 }和N

我的代码是:

M

执行仅返回"否"没有答案,任何想法是什么问题?

2 个答案:

答案 0 :(得分:1)

尝试

l = [1]  
l + (2,) # error

你的第一个条款

l += [2]
l += list((2,))

是错误的,因为你必须将findnum(N, N, N). findnum(N, M, Res) :- N1 is N+1, N < M, findnum(N1, M, R0), Res is R0 + N. 设置(统一)为一个值;如果您想要从findnum(N, N, M). M的总和数字,则总和为N,所以

N

第二个条款的想法是将N加到findnum(N, N, N). N之和;我在您的实现中看到了三个错误:

1)你必须调用终端子句(N+1)所以保护M是错误的,因为当findnum(N, N, N)等于N1 < M时你必须​​调用终端子句};正确的后卫是N1M

2)如果你对N < M的递归调用,对于第三个参数,使用相同的变量(N1 <= M),则无法添加findnum/3,所以你必须在我的示例中使用另一个变量Res进行调用

3)N错了;正确的版本是R0;当前号码(Res is N1 + M)加上Res is R0 + NN之和。

答案 1 :(得分:1)

我意识到这可能没什么用,但我只能说出来。

sums_upto(N, Sums) :- succ(N, N1), Sums is N * N1 / 2.

findnum(N, M, Total) :- 
  N < M,
  sums_upto(N, NSum), 
  sums_upto(M, MSum), 
  Total is N + MSum - NSum.