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

时间:2016-05-26 00:56:33

标签: operators yap

尝试创建列表理解。我在这里有什么工作在SWI Prolog,还有Jekejeke Prolog,但是[< - ]运算符在Yap失败了。无法弄清楚原因。

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

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

DEFINE运营商:

:- 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) }.

END。

1 个答案:

答案 0 :(得分:0)

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

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