2011-09-15 61 views
1

如何生成一個從1到N的數字列表,其中N> = 0?序言:數字列表

謂詞:數字(N,L)。

?-­ numbers(5,X). 

X = [1, 2, 3, 4, 5]. 

?­- numbers(0,X). 

X = []. 
+2

這功課嗎?你試過什麼了? – starblue

+2

無論何時涉及到列表,您必須將問題劃分爲基本案例和歸納案例。你能做到嗎? –

回答

2

您可以使用between生成之間的端點整數,然後findall收集在一起。如果你給算什麼< = 0,之間失敗,該斷言產生空列表

numbers(Count, List) :- 
    findall(N, between(1,Count,N), List). 

- 試試這個斷言。

8

使用內置numlist/3

?- numlist(1, 5, L). 
L = [1, 2, 3, 4, 5]. 

?- numlist(1, 0, L). 
false. 

在SWI-Prolog中您可以使用listing(numlist)看看它是如何被實現的。

請注意,numlist/3永遠不會生成一個空列表。如果你想這樣做,那麼你需要寫一個簡單的包裝器,將失敗映射到一個空列表。