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

时间:2013-12-11 08:24:43

标签: list prolog between

因为这个问题我的问题出现了 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的初学者,所以我不知道......

抱歉英文不好..

感谢您的帮助:)

1 个答案:

答案 0 :(得分:6)

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

两种方式:

?- findall(X, between(2, 6, X), Xs).
Xs = [2, 3, 4, 5, 6].

您还应该查看bagof/3setof/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中。