【问题标题】:Prolog: between/3 with a list at the endProlog: between/3,最后有一个列表
【发布时间】:2013-12-11 22:36:37
【问题描述】:

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

抱歉英语不好..

感谢您的帮助:)

【问题讨论】:

    标签: list prolog between


    【解决方案1】:

    首先去图书馆找一本好书,例如 Sterling 和 Shapiro 的“The Art of 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 中。

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多