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
1行目では、 のときに再帰を停止するように基本ケースを作成するにはどうすればよいですか? これは正しいです?
次の 2 つの節については、論理プログラミングの観点から考えるのに苦労しています。これは間違いなくロジックプログラミングスタイルではないと感じています。
失敗した場合はisPrime(X)
何も保存せずに次の番号に進みますが、isPrime(X)
が真の場合は再帰して次の番号に進み、 を保存しX
ます。
Prologでそれを行うにはどうすればよいですか?