如何生成从1到N的数字列表,其中N> = 0?
谓词:数字(N,L)。
?- numbers(5,X).
X = [1, 2, 3, 4, 5].
?- numbers(0,X).
X = [].
答案 0 :(得分:12)
使用内置numlist/3
:
?- numlist(1, 5, L).
L = [1, 2, 3, 4, 5].
?- numlist(1, 0, L).
false.
在SWI-Prolog中,您可以使用listing(numlist)
查看其实施方式。
请注意,numlist/3
永远不会生成空列表。如果你想要那个,那么你需要编写一个将失败映射到空列表的简单包装器。
答案 1 :(得分:3)
您可以使用between
生成到端点之间的整数,然后使用findall
将它们收集在一起。试试这个谓词 -
numbers(Count, List) :-
findall(N, between(1,Count,N), List).
如果你给Count任何< = 0,则在失败之前,这个谓词将生成空列表。