Module 如何找出Prolog运算符来自哪个模块?

Module 如何找出Prolog运算符来自哪个模块?,module,prolog,operators,swi-prolog,Module,Prolog,Operators,Swi Prolog,这可能是特定于SWI Prolog的 如何询问系统谓词来自哪个模块 对于谓词,可以使用: - 谓词属性(是从(M)导入的命令集()。 M=ordsets。 好的,是来自模块ordset的命令集/2 我还可以要求提供定义该模块的特定文件: - 谓词属性(是命令集(u),文件(F))。 F='/usr/local/logic/swipl/lib/swipl/library/ordsets.pl'。 但是,至少在SWI Prolog中,如何对模块中定义和导出的运算符执行相同的操作?SWI Prol

这可能是特定于SWI Prolog的

如何询问系统谓词来自哪个模块

对于谓词,可以使用:

-
谓词属性(是从(M)导入的命令集()。
M=ordsets。
好的,
是来自模块
ordset
的命令集/2

我还可以要求提供定义该模块的特定文件:

-
谓词属性(是命令集(u),文件(F))。
F='/usr/local/logic/swipl/lib/swipl/library/ordsets.pl'。

但是,至少在SWI Prolog中,如何对模块中定义和导出的运算符执行相同的操作?SWI Prolog是为数不多的几个可以在模块中本地定义运算符的Prolog系统之一。查找操作员导出哪个模块的可能解决方案(但从性能角度来看并不理想):

?- current_module(M),
   module_property(M, exported_operators(Operators)),
   member(Operator, Operators).
例如:

?- use_module(library(clpfd)).
true.

?- current_module(M),
   module_property(M, exported_operators(Operators)),
   member(op(Priority, Type, '#>'), Operators).
M = clpfd,
Operators = [op(760, yfx, #<==>), op(750, xfy, #==>), op(750, yfx, #<==), op(740, yfx, #\/), op(730, yfx, #\), op(720, yfx, #/\), op(710, fy, #\), op(700, xfx, #>), op(..., ..., ...)|...],
Priority = 700,
Type = xfx .
?-使用_模块(库(clpfd))。
对。
?电流_模块(M),
模块_属性(M,导出的_运算符(运算符)),
成员(op(优先级,类型“#>”),运算符)。
M=clpfd,
运算符=[op(760,yfx,#)、op(750,xfy,#==>)、op(750,yfx,#)、op(…,…,…)|],
优先级=700,
Type=xfx。

可能有更好的解决方案……

足够好了。也许我们必须引诱Jan添加一些功能。