0

数X(Xを除く)のすべての除数を合計するPrologプログラムdivisor_sumを作成しようとしています。

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

私のコードの何が問題になっていますか?ご協力いただきありがとうございます。

4

2 に答える 2

2

バインドされた A はまだありません。の後=:=-testを移動する必要があります。A is ...

于 2012-12-04T12:07:55.347 に答える
0

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 is X mod Nが成功すると、別の除数がわかり、探索に時間がかかります。

于 2012-12-04T14:21:42.650 に答える