gpt4 book ai didi

prolog - SWI Prolog Clpfd 库——具体化

转载 作者:行者123 更新时间:2023-12-04 17:16:58 26 4
gpt4 key购买 nike

我有一个即将到来的逻辑考试,并且一直在学习我类(class)中的一些过去的论文。我遇到了一个关于物化的问题,并将其发布在下面;

用具体化来表示变量 B 的性质
取值为 1 或 8。

在阅读了一些资源并查看了 SWI Prolog 手册后,我仍然觉得 reification 的概念很困惑(主要是学习 Java,因此转向学习 Prolog 一直很困难)。不得不在 prolog 查询中使用 bool 逻辑非常令人困惑。

如果没有具体化,我将不得不编写以下代码(我知道这太长了,无法成为正确答案);

 B in 1..8, B #\= 2,B #\= 3,B #\= 4,B #\= 5,B #\= 6,B #\= 7. 

如果有人可以向我展示上述查询,但使用具体化,我将不胜感激。

最佳答案

首先,尝试您的查询:

?- B in 1..8, B #\= 2,B #\= 3,B #\= 4,B #\= 5,B #\= 6,B #\= 7。
B 在 1\/8。

这告诉您您的查询是 等效 到单一目标 B in 1\/8 .

由此,你看到你不需要具体化以表示有限域变量等于 1 或 8。

具体化允许您具体化约束的真值。例如,你可以说:

?- T #<==> B in 1\/8。
T 在 0..1,
B in 1\/8#<==>T。

?- T #<==> B in 1\/8, B = 3。
T = 0,
乙 = 3。

从第二个查询中,您可以看到 if B = 3 ,然后 T = 0 ,因为约束 B in 1\/8 不持有在这种情况下。

如果您想对约束本身进行推理,则将约束具体化可能会很有用。例如,这允许您表示一定数量的列表元素必须等于给定的整数。我把解决这个问题作为一个更有意义的练习来理解具体化。

关于prolog - SWI Prolog Clpfd 库——具体化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37098648/

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