我对 Prolog 的递归函数有疑问。我相信我没有正确实施它,需要帮助。
我需要生成前 N 个素数并将其返回到列表中。生成素数不是问题,而是在列表中生成它是我遇到的问题。
这是相关代码的一部分:
genList(_, 0, _).
genList(X, N, PrimeList, PrimeList):-
N > 0,
isprime(X),
X1 is X +1,
N1 is N -1,
genList(X1,N1,[X|PrimeList], [X|PrimeList]),!.
genList(X, N, PrimeList, PrimeList):-
N>0,
\+isprime(X),
X1 is X + 1,
genList(X1,N,PrimeList, PrimeList).
这是我在 Prolog 解释器中输入的内容:
genList(1,N, [],L).
对于第一行,我如何制作基本情况,以便何时N=0
停止递归?它是否正确?
至于接下来的 2 个子句,我在逻辑编程方面难以思考。我绝对觉得这不是逻辑编程风格。
我想说的是,当isPrime(X)
失败时,我们继续下一个数字而不保存任何内容,但是当isPrime(X)
为真时,我们递归并继续下一个数字,保存X
。
我如何在 Prolog 中做到这一点?