Prolog:数字列表

Jam*_*mes 2 list prolog

如何生成从1到N的数字列表,其中N> = 0?

谓词:数字(N,L).

?-­ numbers(5,X).

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

?­- numbers(0,X).

X = [].
Run Code Online (Sandbox Code Playgroud)

Kaa*_*rel 12

使用内置numlist/3:

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

?- numlist(1, 0, L).
false.
Run Code Online (Sandbox Code Playgroud)

在SWI-Prolog中,您可以使用listing(numlist)它来查看它是如何实现的.

请注意,numlist/3永远不会生成空列表.如果你想要,那么你需要编写一个将失败映射到空列表的简单包装器.


Dav*_*ein 6

您可以使用between生成端点之间的整数,然后findall将它们收集在一起。试试这个谓词 -

numbers(Count, List) :-
    findall(N, between(1,Count,N), List).
Run Code Online (Sandbox Code Playgroud)

如果您给 Count everything <=0, Between 失败,则该谓词将生成空列表。