代码之家  ›  专栏  ›  技术社区  ›  Bruno E

prolog中的素性检查器

  •  1
  • Bruno E  · 技术社区  · 6 年前

    我对prolog很陌生。 我编写了以下代码来测试一个数字是否是素数。

    notPrime(X):-
        integer(Y),
        Y>1,
        mod(X,Y) is 0.
    
    prime(X):- \+ notPrime(X).
    

    我的想法是:“如果一个数字x不是素数,那么就存在一个整数y>1,这样x mod y就是0。”

    但是代码不起作用,我也不明白为什么。 谢谢)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Guy Coder    6 年前

    但是代码不起作用,我也不明白为什么。

    在你的第一句话里

    notPrime(X):-
        integer(Y),
        Y>1,
        mod(X,Y) is 0.
    

    声明

    integer(Y) 
    

    使用变量 Y 但是 Y 不绑定到值并且

    integer(Y)
    

    检查y是否为整数,失败。见 integer/1

    integer/1 不生成整数,它测试值是否为整数。

    有关使用prolog生成素数的工作示例,请参见 Rosetta code task 对于 Primality by trial division