1

与えられた数の除数の数を数える述語に取り組んでいます。それらすべてを数えるわけではありませんが、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を返します。

だから私の質問は、どうすればこれを修正できますか?

4

1 に答える 1

1

コードにエラーがあります。修正を投稿します。たぶん、あなたはいくつかのマイナーな変更を行う必要があるでしょう。

%% count all factors of Product
%
countFactors(Product, Count, Divisor, Tot) :-
     Divisor > Product/2,
     !, Tot is Count.
countFactors(Product, Count, Divisor, Tot):-
     (   Product mod Divisor =:= 0
     ->  NewC is Count + 1
     ;   NewC is Count
     ),
     NextD is Divisor + 1,
     countFactors(Product, NewC, NextD, Tot).
于 2012-04-11T18:49:34.603 に答える