【问题标题】:Prolog Count divisorsProlog 计数除数
【发布时间】:2012-04-11 18:45:18
【问题描述】:

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

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,但不会递增到下一个除数,它只是停止并返回 false。

所以我的问题是,我该如何纠正这个问题?

【问题讨论】:

    标签: prolog


    【解决方案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).
    

    【讨论】:

    • 对不起,我不太明白你在这里做了什么。所有这一切都是为任何输入产品返回 X = 2。即 countFactors(3,0,2,X)。返回 X=2;显然这不是真的……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多