如何生成一個從1到N的數字列表,其中N> = 0?序言:數字列表
謂詞:數字(N,L)。
?- numbers(5,X).
X = [1, 2, 3, 4, 5].
?- numbers(0,X).
X = [].
如何生成一個從1到N的數字列表,其中N> = 0?序言:數字列表
謂詞:數字(N,L)。
?- numbers(5,X).
X = [1, 2, 3, 4, 5].
?- numbers(0,X).
X = [].
您可以使用between
生成之間的端點整數,然後findall
收集在一起。如果你給算什麼< = 0,之間失敗,該斷言產生空列表
numbers(Count, List) :-
findall(N, between(1,Count,N), List).
- 試試這個斷言。
使用內置numlist/3
:
?- numlist(1, 5, L).
L = [1, 2, 3, 4, 5].
?- numlist(1, 0, L).
false.
在SWI-Prolog中您可以使用listing(numlist)
看看它是如何被實現的。
請注意,numlist/3
永遠不會生成一個空列表。如果你想這樣做,那麼你需要寫一個簡單的包裝器,將失敗映射到一個空列表。
這功課嗎?你試過什麼了? – starblue
無論何時涉及到列表,您必須將問題劃分爲基本案例和歸納案例。你能做到嗎? –