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を返すと期待します。
EDIT:これで、Falseを返す理由がわかりました。問題の除数が要因であり、再帰するとうまくいきます。しかし、それが要素でない場合はfalseを返しますが、次の除数にはインクリメントしません。停止してfalseを返します。
私の質問は、どうすれば修正できますか?
すみません、私は本当にあなたがここで何をやったかを理解していません。これはすべての入力プロダクトに対してX = 2を返します。 countFactors(3,0,2、X)。 X = 2を返します。明らかにこれは真実ではありません... – XavierNuquos
申し訳ありませんが、私はデバッグしていません... – CapelliC