Prolog:在/ 3之间,最后是一个列表

use*_*164 3 list prolog between

我的问题因为这个问题而出现 你能在纯粹的prolog之间写/ 3吗?

是否有可能在/ 3之间进行,第三个参数是一个列表,所以如果你问

between(2,6,X).
Run Code Online (Sandbox Code Playgroud)

它来了

X=[2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

而不是喜欢

X=2
X=3
X=4
....
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这必须如何工作(我所有的解决方案都不起作用..)我是Prolog的初学者,所以我不知道..

抱歉英文不好..

谢谢你的帮助 :)

小智 6

首先去图书馆并获得一本好书,例如Sterling和Shapiro的"The Prolog".

两种方式:

?- findall(X, between(2, 6, X), Xs).
Xs = [2, 3, 4, 5, 6].
Run Code Online (Sandbox Code Playgroud)

你也应该看看bagof/3setof/3.

直接的方式,numlist/3请参阅SWI-Prolog实现.没有参数检查,它归结为:

numlist(U, U, List) :- !,
    List = [U].
numlist(L, U, [L|Ns]) :-
    L2 is L+1,
    numlist(L2, U, Ns).
Run Code Online (Sandbox Code Playgroud)

有几种方法可以打破谓词.

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

不会终止.在将参数传递给以下特定版本之前,您需要检查参数numlist/3:

must_be(integer, L),
must_be(integer, U),
L =< U
Run Code Online (Sandbox Code Playgroud)

这些检查包含在numlist/3链接的SWI-Prolog实现的库谓词中.