Prolog - 除数之和 - 编译错误

时间:2012-12-04 10:07:41

标签: prolog sum division

我正在尝试创建一个Prolog程序divisor_sum,它总结了数字X的所有除数(不包括X)。

acc_divisor_sum(X,_,X).
acc_divisor_sum(X,Y,C):- A=:=0, A is X mod N, C is N+1, Y is Y+C, acc_divisor_sum(X,Y,C).
acc_divisor_sum(X,Y,C):- A=\=0, A is X mod N, C is N+1, acc_divisor_sum(X,Y,C).
divisor_sum(X,Y):- acc_divisor_sum(X,Y,1).

我得到的错误。

   ?- divisor_sum(12,Y).
ERROR: =:=/2: Arguments are not sufficiently instantiated
^  Exception: (9) _L144=:=0 ? creep
   Exception: (8) acc_divisor_sum(12, _G204, 1) ? creep

我的代码出了什么问题?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

还没有约束A.您需要在<{em> =:=之后移动A is ... - 测试

答案 1 :(得分:0)

我认为你应该使用带有4个args的谓词:

% @arg1 : Number to study
% @arg2 : current divisor
% @arg3 : current sum of divisors
% @arg4 : final sum of divisors
acc_divisor_sum(X, Div, S, TT)

现在,当 0是X mod N 成功时,你知道另一个除数,你可以在搜索中获得时间。