2012-04-11 36 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