gpt4 book ai didi

prolog - 为什么在 SWI-Prolog 版本 6.4.1 中,current_functor/2 对于 0 元谓词是假的?

转载 作者:行者123 更新时间:2023-12-04 17:49:47 25 4
gpt4 key购买 nike

我在 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) Successively unifies Name with the name and Arity with the arity of functors known to the system.



谁能帮助我理解为什么谓词以这种方式起作用?

编辑:

在解决我测试谓词是否已定义的特殊问题方面,包括某些 0 元数的谓词,我最终遵循了 false 的建议并编写了以下内容:
current_pred(P) :-
current_predicate(P/_).

最佳答案

我认为 pl-funct.c 的第 391 行可能存在错误。
那行读

if ( fd && fd->arity > 0 && (!nm || nm == fd->name) )

现在我将尝试更正为 fd->arity >= 0并测试...

编辑显然它有效:
1 ?- [user].
yy.
|:
% user://1 compiled 0.00 sec, 2 clauses
true.

2 ?- current_functor(yy,X).
X = 0 ;
false.

我会尝试提交,但我认为我没有对完整源代码的 git 访问权限......

确实编辑,git 拒绝接受我的更改...我将报告 SWI-Prolog 邮件列表。

关于prolog - 为什么在 SWI-Prolog 版本 6.4.1 中,current_functor/2 对于 0 元谓词是假的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com