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/3
和setof/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实现的库谓词中.