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

だそれ!

また、module/2のSWIマニュアルも読んでください!