【问题标题】:To generate all the prime numbers using the isprime/1 build in function. Prolog使用 isprime/1 内置函数生成所有素数。序言
【发布时间】:2020-06-28 22:35:00
【问题描述】:

问题问: ?- 素数(X)。

解决方案应如下所示:

X = 1;
X = 1;
X = 2;
X = 3;
X = 5;
X ....

这就是我到目前为止所拥有的: prime(X) :- 重复,incr(X,X),isprime(X)。

incr(X,X1) :- X1 is X+1.

isprime(X):-
    Y is 2, 
    X > 1, 
    \+div(X,Y).


div(X,Y):-
    N is Y*Y,
    N =< X,
    X mod Y =:= 0.

div(X,Y):-
    Y < X, 
    Y1 is Y+1, 
    div(X,Y1).

【问题讨论】:

  • incr(X, X) 永远无法满足,因为没有数字等于它的后继者。
  • 是的,这是事实,但是您如何启动 X 让我们说 1 以便开始增量。所以基本上我试图测试 isprime 中的每个整数以确定所有素数。否则 prolog 会告诉我他们没有足够的数据。

标签: prolog primes


【解决方案1】:

incr/2 谓词使用以下替代方法:

incr(I, I).
incr(I, K) :-
    J is I + 1,
    incr(J, K).

使用目标调用它:

| ?- incr(1,X), isprime(X).
?- incr(1,X), isprime(X).
X = 2 ;
X = 3 ;
X = 5 ;
X = 7 ;
X = 11 ;
X = 13 ;
...

【讨论】:

  • 太棒了,非常感谢,我开始对那个 incr 谓词失去耐心了。
猜你喜欢
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多