我有一个 prolog 源文件,它允许我很好地使用 ($)/2
元谓词,但是当我将它转换为如下模块时,我会在任何地方出现语法错误 $
用于工作:
:- module('mymodule', [mypred1/2, mypred2/3, ($)/2]).
:- use_module(library(func)).
我也尝试过reexport
,但无济于事。
所以像 X is mypred1$"something"
这样的事情给我一个语法错误。但是,从源文件中删除 :- module(...
行可以解决此问题。
如何让 $
在模块中正常运行?
最佳答案
当您使用自定义中缀运算符 ($)/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 手册一切顺利!
关于prolog - SWI Prolog 函数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37560222/