我的 Yap 运算符定义有什么问题?



试图创建一个列表推导。我在这里拥有的内容适用于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 的素数列表(包括 M)。将列表返回为 P。

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

结束。

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

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

相关内容

  • 没有找到相关文章

最新更新