Prolog Count divisors

时间:2012-04-11 18:45:18

标签: prolog

我正在研究一个谓词,它将计算给定数字的除数。它不会计算所有这些,但足以让我知道它有两组以上的因素。这就是我所拥有的:

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。

所以我的问题是,我该怎么纠正这个?

1 个答案:

答案 0 :(得分: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).