尝试创建列表理解。我在这里有什么工作在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。
答案 0 :(得分:0)
尝试了许多不起作用的东西,但当我将谓词mapList / 2,findAll / 3和betWeen / 3的定义移动到定义了新运算符的同一模块时,它解决了问题。 / p>
Yap需要这三个谓词,因为与SWI-Prolog不同,它们不提供。也许他们在我没有的图书馆里。