SWI Prolog功能包

时间:2016-06-01 05:35:38

标签: prolog swi-prolog

我有一个prolog源文件,允许我使用($)/2元谓词,但是当我将其转换为模块时,如果使用$,我会收到语法错误工作:

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

我也试过reexport,但无济于事。

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

如何让$在模块中正常运行?

1 个答案:

答案 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手册,您就可以了!