[英]Building a List Recursively Prolog
這是一個非常簡單的問題,希望它也有一個簡單的答案。 我正在嘗試生成最多N個數字的列表。例如,對於N = 3,程序將輸出[0,1,2]。
我的問題是我的代碼給了我[[0,1,2]]。 我需要列表只是一個列表,而不是嵌套在另一個列表中。
這是我的代碼:
genNhelp2(N,N,L,L).
genNhelp2(N,C,L,R) :-
C < N,
append(L,C,Res),
C1 is C + 1,
genNhelp2(N,C1,Res,R).
genN(N,R) :-
genNhelp2(N,0,[],R).
我也嘗試過,結果相同:
genNhelp(N,N,[]).
genNhelp(N,C,[C|R]) :-
C < N,
C1 is C + 1,
genNhelp(N,C1,R).
genN(N,R) :-
genNhelp(N,0,R).
這似乎很容易解決,但我無法弄清楚。 謝謝!
您介意將您的簽名從genN / 2更改為genN / 3從而使它更通用,更簡單嗎?
genN(X, X, [X]).
genN(From, To, [From|T]) :-
From1 is From + 1,
genN(From1, To, T).
現在可以執行以下操作:
>> genN(0, 3, L).
L = [0, 1, 2, 3]
乃至
>> genN(-2, 4, L).
L = [-2, -1, 0, 1, 2, 3, 4]
您真的不需要幫助者。 這個怎么樣?
genN(0,[]).
genN(N,R) :-
N > 0,
N1 is N-1,
genN(N1,R1),
append(R1,[N1],R).
這樣的事情應該起作用:
gen_range(N,Ns) :- % to generate a list of sequential numbers,
gen_range(N,0,[],Ns) % - just invoke the helper, appropriately seeded
. % - that's all there is to it.
gen_range(0,_,Ns,NS). % succeed when the range is complete
gen_range(N,X,Ts,Ns) :- % otherwise...
N > 0 , % - if the range is not yet complete
N1 is N-1 , % - increment X
X1 is X+1 , % - decrement N
gen_range(N1,X1,[X|Ts],Ns) % - and recurse down.
. %
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.