2012-04-11 44 views
1

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

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

你的代码有一些错误,我发布了一些更正。也许你需要做一些小的修改。

%% 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). 
+0

对不起,我真的不明白你在这里做了什么。所有这一切都是为任何输入产品返回X = 2。即countFactors(3,0,2,X)。返回X = 2;显然这不是真的... – XavierNuquos 2012-04-11 19:00:47

+0

对不起,我没有调试... – CapelliC 2012-04-11 21:37:35