正在尝试创建列表理解。我这里的代码在SWI Prolog和Jekejeke Prolog中都可以工作,但是<-操作符在Yap中失败了。找不到原因。
必须在/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和N)的素数列表。将列表返回为P。
primes(M, N, P) :- P <- { X & X <- M..N & prime(X) }.结束。
发布于 2016-05-27 00:09:27
我尝试了许多不起作用的方法,但当我将谓词mapList/2、findAll/3和betWeen/3的定义移到定义新运算符的同一模块中时,问题就解决了。
这三个谓词在Yap中是必需的,因为与SWI-Prolog不同的是,没有提供这三个谓词。也许它们在一个我没有的图书馆里。
https://stackoverflow.com/questions/37449894
复制相似问题