我有一个prolog源文件,允许我使用($)/2
元谓词,但是当我将其转换为模块时,如果使用$
,我会收到语法错误工作:
:- module('mymodule', [mypred1/2, mypred2/3, ($)/2]).
:- use_module(library(func)).
我也试过reexport
,但无济于事。
所以像X is mypred1$"something"
这样的操作会给我一个语法错误。但是,从源文件中删除:- module(...
行可以解决问题。
如何让$
在模块中正常运行?
答案 0 :(得分:2)
当您使用自定义中缀运算符($)/2
并引入模块"边界"时会出现问题。
在实施 Prolog lambdas时,Ulrich Neumerkel面临同样的问题! 对于针对SWI的修复,请查看并研究lambda.pl - 它以:
开头:- module(lambda, [(^)/3, (^)/4, (^)/5, (^)/6, (^)/7, (^)/8, (^)/9, (^)/10, (\)/1, (\)/2, (\)/3, (\)/4, (\)/5, (\)/6, (\)/7, (\)/8, (+\)/2, (+\)/3, (+\)/4, (+\)/5, (+\)/6, (+\)/7, (+\)/8, (+\)/9, op(201,xfx,+\)]).
那就是它!
另外,请阅读module/2上的SWI手册,您就可以了!