与えられた数の除数の数を数える述語に取り組んでいます。それらすべてを数えるわけではありませんが、2セット以上の要因があることを私は知るのに十分です。これが私が持っているものです:
countFactors([_,_,_,_X]):-!.
countFactors(Product, Count,Divisor, _X):-
Divisor =< Product/2,
Product mod Divisor = 0,
NewC is Count + 1,
NextD is Divisor + 1,
countFactors(Product,NewC, NextD, NewC).
ただし、countFactors(16,0,2、X)を実行します。単にfalseを返しますが、X=2を返すことを期待します
編集:わかりました。これで、なぜfalseが返されるのかがわかりました。問題の除数が要因である場合は正常に機能し、再発します。ただし、それが要因でない場合は、falseを返しますが、次の除数にインクリメントせず、停止してfalseを返します。
だから私の質問は、どうすればこれを修正できますか?