私は1000より下の3と5の正の倍数の合計を求めようとしています。5の倍数の合計から3の倍数を削除するはずの部分を追加した後、gprologは、クエリ?- sigma(1000,N).
初心者 - 3と5の倍数を加算する
問題が明らかにsigma5にあるが、私はかなりそれを見つけることができないため、「いいえ」を吐き続けます:
sigma(Num, Result) :- sigma3(Num, 3, Result3),
sigma5(Num, 5, Result5),
Result is Result3 + Result5.
sigma3(Num, A, Result) :- A < Num,
Ax is A+3,
sigma3(Num, Ax, ResultX),
Result is ResultX + A.
sigma3(Num, A, Result) :- A >= Num,
Result is 0.
sigma5(Num, A, Result) :- A < Num,
mod3 is A mod 3,
0 \= mod3,
Ax is A+5,
sigma5(Num, Ax, ResultX),
Result is ResultX + A.
sigma5(Num, A, Result) :- A < Num,
mod3 is A mod 3,
0 == mod3,
Ax is A+5,
sigma5(Num, Ax, ResultX),
Result is ResultX.
sigma5(Num, A, Result) :- A >= Num,
Result is 0.
私のコードの問題は何ですか?
+1:SWIの 'library(clpfd)'とYAPは、上記のようなプログラムをコンパイルします。伝統的な(is)/ 2-modesは、naive(is)/ 2に匹敵する効率を持っています! – false