gpt4 book ai didi

prolog - 如何编写使用 integer/1 查找数字的规则?

转载 作者:行者123 更新时间:2023-12-03 21:36:24 25 4
gpt4 key购买 nike

我正在编写一个寻找特定整数的规则。我以为我可以写这样的东西

find_number(X):-
integer(X),
X > 1, X < 5.

然后期望查询结果为 integer(X)导致 X=2, X=3, X=4, false.相反,我只是得到一个 false结果。我发现编写此规则的唯一方法是使用 numlist/3像这样
find_number(X):-
numlist(2, 4, NumList),
member(X, NumList).

谁能解释这是为什么?

最佳答案

你的推理是 完全有效 伊夫integer/1是真实的 关系满足基本的逻辑属性。

例如,在经典逻辑中,一元谓词 P 满足以下性质:

If P(σ(T)) is satisfiable for any substitution σ and term T, then P(T) is also satisfiable.


这似乎完全显而易见,当然也适用于所有 Prolog 中的谓词。

问题是 integer/1不是 纯粹的关系。

特别是,我们有例如:

?- 整数(3)。
真的。

还有以下 更一般的查询失败:

?- 整数(X)。
错误的。

有整数吗?

信不信由你,就是这样 integer/1实际上有效。

显然,对于这样的谓词来说,有些事情似乎不太合适,所以有 更好的选择 在所有广泛使用的现代 Prolog 系统中。我强烈建议您改用此类替代方案,以充分利用 Prolog。

对于整数,我建议您查看 CLP(FD) 约束 ( )。

例如,在 GNU Prolog 中,您的代码可能如下所示:

good_number(X) :-
X #> 1,
X #< 5。

有以下问题和答案:

| ?- good_number(X)。
X = _#2(2..4)

| ?- good_number(X), fd_labeling([X])。
X = 2 ? ;
X = 3 ? ;
X = 4

这完全符合我们期望的工作关系!我冒昧地更改了名称,使其在更具体的情况下也有意义,在这种情况下,没有什么可以“找到”:

| ?- good_number(3)。
是的

根据您的 Prolog 系统,您可能必须导入一个库才能使用此类更具声明性的功能。另见 想要查询更多的信息。

关于prolog - 如何编写使用 integer/1 查找数字的规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850621/

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