试图创建一个列表理解。我在这里所拥有的在 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) }.
结尾。