如何生成一个从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
无论何时涉及到列表,您必须将问题划分为基本案例和归纳案例。你能做到吗? –