因为这个问题我的问题出现了 Can you write between/3 in pure prolog?
是否可以在/ 3之间进行,第三个参数是一个列表,所以如果你问
between(2,6,X).
来了
X=[2,3,4,5,6]
而不喜欢
X=2
X=3
X=4
....
我无法弄清楚这必须如何运作(我所有的解决方案都不起作用..) 我是Prolog的初学者,所以我不知道......
抱歉英文不好..
感谢您的帮助:)
答案 0 :(得分:6)
首先去图书馆并获得一本好书,例如Sterling和Shapiro的“The Prolog”。
两种方式:
?- findall(X, between(2, 6, X), Xs).
Xs = [2, 3, 4, 5, 6].
您还应该查看bagof/3
和setof/3
。
直接numlist/3
,请参阅the SWI-Prolog implementation。没有参数检查,它归结为:
numlist(U, U, List) :- !,
List = [U].
numlist(L, U, [L|Ns]) :-
L2 is L+1,
numlist(L2, U, Ns).
现在有几种方法可以打破谓词。
?- numlist(1,0,L).
不会终止。您需要先检查参数,然后再将它们传递给numlist/3
的特定版本:
must_be(integer, L),
must_be(integer, U),
L =< U
这些检查包含在链接的SWI-Prolog实现的库谓词numlist/3
中。