2016-06-01 134 views
2

我有一个序言源文件,允许我使用($)/2元谓词很好,但是当我将其转换为一个模块如下,我得到的语法错误的地方$用来工作:SWI Prolog的FUNC包

:- module('mymodule', [mypred1/2, mypred2/3, ($)/2]). 
:- use_module(library(func)). 

我试过reexport也没有用。

因此,如X is mypred1$"something"这样的操作会给我一个语法错误。但是,从源文件中删除:- module(...行可修复此问题。

如何获得$在模块内正常工作?

回答

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,+\)]). 

这就是它!

另外,阅读SWI手册module/2,你很好走!