2016-06-01 133 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,你很好走!