SICStus-Prolog中的current_谓词

SICStus-Prolog中的current_谓词,prolog,iso-prolog,sicstus-prolog,Prolog,Iso Prolog,Sicstus Prolog,SICStus Prolog提供了当前谓词/1和当前谓词/2 各国: 当前谓词(?PredSpec) 将PredSpec与形式为Name/Arity的谓词规范统一起来 当前谓词(?名称,?术语) 将名称与用户定义谓词的名称统一,并将术语与对应于该谓词的最通用术语统一 它们似乎具有相同的特征: 这两个谓词都用于枚举谓词,都用于模块 手册页面注释: 当前谓词/1是ISO Prolog标准的一部分;当前的_谓词/2不可用 我是否应该在新(=非遗留)代码中使用当前谓词/2 current\u predi

SICStus Prolog提供了当前谓词/1和当前谓词/2

各国:

当前谓词(?PredSpec)

将PredSpec与形式为Name/Arity的谓词规范统一起来

当前谓词(?名称,?术语)

将名称与用户定义谓词的名称统一,并将术语与对应于该谓词的最通用术语统一

它们似乎具有相同的特征: 这两个谓词都用于枚举谓词,都用于模块

手册页面注释:

当前谓词/1是ISO Prolog标准的一部分;当前的_谓词/2不可用


我是否应该在新(=非遗留)代码中使用
当前谓词/2

current\u predicate/2
的好处是,与
current\u predicate/1
不同,如果定义了谓词,则允许使用谓词调用模板进行查询。例如

...,
(   current_predicate(_, foo(_, _)) ->
    foo(A, B)
;   ...
),
...
但您通常可以使用标准的
predicate\u属性/2
谓词,它将模板作为第一个参数

另外,如果Logtalk linter发现您正在调用
当前谓词/2
:-),它会向您尖叫(并建议一个更标准的替代方案)