我遇到了Prolog遞歸函數的問題。我相信我沒有正確實施,需要幫助。Prolog查找N個素數
我需要生成前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).
對於1號線,如何使基本情況如當N=0
,我停止遞歸?它是否正確?
至於接下來的2個子句,我在邏輯編程方面有困難。我絕對認爲這不是邏輯編程風格。
我想說的是,當isPrime(X)
失敗了,我們繼續下一個數字,沒有保存任何,但是當isPrime(X)
是真的,那麼我們遞歸,繼續下一個號碼,節省X
。
如何在Prolog中執行此操作?
嘿模! 真誠感謝您在代碼中的意見。它幫助我清除了我在解決這個問題時的許多疑問。 雖然有關CUT的問題。在第二個條款中,在第二條款 'code'isPrime(N), !, NewN是N-1,'code' 當您到達!時,是否正確地說它會停止在那個謂詞中遞歸,然後繼續下一個(你不測試N是否是素數)? 謝謝。 – ali
不,只是意味着選擇點將被刪除。搜索選擇點和切,你應該找到很好的資源:) – m09
@ali與新問題問這個答案我意識到我甚至沒有正確回答你的第一個問題。無論如何,希望你成功地適應了你的問題! – m09