2011-09-15 55 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永远不会生成一个空列表。如果你想这样做,那么你需要写一个简单的包装器,将失败映射到一个空列表。