gpt4 book ai didi

prolog - ECLiPSe Prolog - 'nonvar/1' 的意外行为

转载 作者:行者123 更新时间:2023-12-05 01:29:23 25 4
gpt4 key购买 nike

我浏览了一些 ECLiPSe 文档并发现了这个:

`nonvar/1` : Fails if Term is not instantiated

我试过这样做:

1. Query: nonvar(X). Result: No (AS EXPECTED)
2. Query: X=5, nonvar(X). Result: Yes (AS EXPECTED)
3. Query: X=5, nonvar(f(X)). Result: Yes, X=5. (AS EXPECTED)

现在这个查询结果让我很困惑:

4. Query: nonvar(f(X)). Result: Yes, X=X.

查询 1、2、3 按预期工作。对我来说,4 的结果很奇怪。根据 nonvar/1 在 eclipse 中的文档,参数可以是任何 PROLOG TERM(因此,f(X) 很好),并且 nonvar 测试参数是否已实例化。

在 4 的情况下,它没有被实例化,所以它应该是 NO 而不是 YES (X=X)。如果我的理解不正确,请纠正我,或者这是 ECLiPSe prolog 中的文档问题?我使用的是最新版本。

谢谢!

最佳答案

在您的查询 4 ​​中,f(X) 包含 非实例化变量 X 但它不是它本身 一个未实例化的变量。

SWI-Prolog 的帮助可能对 nonvar 的含义更清楚一些:

nonvar(Term): True if Term currently is not a free variable.

您可以使用 ground/1 检查一个术语是否包含自由变量:

?- X = 5, ground(f(X)).
X = 5.

?- ground(f(X)).
false.

关于prolog - ECLiPSe Prolog - 'nonvar/1' 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154657/

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