我正在研究一个谓词,它将计算给定数字的除数。它不会计算所有这些,但足以让我知道它有两组以上的因素。这就是我所拥有的:
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。所以我的问题是,我该怎么纠正这个?
答案 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).