0

试图创建一个列表理解。我在这里所拥有的在 SWI Prolog 和 Jekejeke Prolog 中工作,但 [ <- ] 运算符在 Yap 中失败。无法弄清楚为什么。

必须创建 between/3、findall/3 和 maplist/2,因为它们不是 Yap 的一部分。我相信这三个自制谓词可以正常工作(它们在 Jekejeke Prolog 中可以正常工作)。

Yap 6.2.2 似乎无法处理 [ <- ] 运算符。获取紧接在运算符之前的语法错误。

定义运算符:

:- op(700, xfx, [ <- ]).
:- op(450, xfx, [ .. ]).
:- op(1100, yfx, [ & ]).

为列表理解创建一个模板:

Vs <- M..N :-
    integer(M),
    integer(N),
    M =< N,
    betWeen(M, N, Vs).

Vs <- {Var & Dec & Pred} :-
    findAll(Var, mapList(call, [Dec, Pred]), Vs).

使用模板创建一个从 M 到 N 的素数列表,包括在内。将列表返回为 P。

primes(M, N, P) :- P <- { X & X <- M..N & prime(X) }.

结尾。

4

1 回答 1

0

尝试了许多不起作用的方法,但是当我将谓词 mapList/2、findAll/3 和 betWeen/3 的定义移到定义新运算符的同一模块中时,它解决了问题。

Yap 中需要这三个谓词,因为与 SWI-Prolog 不同,它们没有提供。也许他们在我没有的图书馆里。

于 2016-05-26T16:09:26.533 回答