我在 OS X 7 上使用 SWI-Prolog 版本 6.4.1,并且在使用谓词时遇到以下意外行为current_functor/2
:
鉴于事实
p(a).
q.
我得到这些查询的答案:
?- current_functor(p, Y).
Y = 1
?- current_functor(q, Y).
false.
?- current_functor(q, 0).
true.
不仅第二个和第三个查询看起来明显不一致,而且第二个查询的失败似乎与 SWI-Prolog 参考手册不一致,其描述current_functor/2
如下:
current_functor(?Name, ?Arity) 依次将 Name 与名称统一,将 Arity 与系统已知的函子的数量统一。
谁能帮我理解为什么谓词以这种方式起作用?
编辑:
为了解决我测试谓词是否已定义的特殊问题,包括某些 0-arity 的,我最终遵循了 false 的建议并编写了以下内容:
current_pred(P) :-
current_predicate(P/_).