【问题标题】:Returning a list of primes in Prolog在 Prolog 中返回素数列表
【发布时间】:2014-05-03 23:04:38
【问题描述】:

我正在尝试创建一个返回数素数直到 N 数的列表。

我有这段代码表明一个数字是否是素数:

is_prime(2).  
is_prime(3). 
is_prime(P) :- integer(P), P > 3, P mod 2 =\= 0, \+has_factor(P,3). 
has_factor(N,L) :- N mod L =:= 0. 
has_factor(N,L) :- L * L < N, L2 is L + 2, has_factor(N,L2). 

效果很好。

我的逻辑是:测试 N 是否为素数,如果是,则将 N 添加到列表中,如果不忽略并测试 N-1。代码如下:

primeList(N,C):- is_prime(N) -> append(N,[C],L),fail; N1 is N-1, primeList(N1,L).

而且它不起作用!我怎样才能按照我的逻辑解决这个问题? 非常感谢。

【问题讨论】:

    标签: list prolog logic primes


    【解决方案1】:

    一旦 Prolog 中的变量在谓词子句中被实例化(具有值),它就不能被重新分配。所以你不能一直在primeList中追加L列表。

    但你可以使用findallbetween

    prime_list(N, C) :-
        findall(X, (between(2,N,X), is_prime(X)), C).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多