Пролог - сумма делителей - ошибка компиляции

Я пытаюсь создать программу 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

Что не так с моим кодом? Спасибо за вашу помощь.


person user1754248    schedule 04.12.2012    source источник


Ответы (2)


Границы A еще нет. Вам нужно переместить =:=-тест после A is ....

person Volker Stolz    schedule 04.12.2012

Я думаю, вам следует работать с предикатом с 4 аргументами:

% @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 по модулю N успешно, вы знаете еще один делитель, и вы можете выиграть время в поиске.

person joel76    schedule 04.12.2012