gpt4 book ai didi

prolog - 为什么我需要运行 clpfd :label/1 for my query to terminate?

转载 作者:行者123 更新时间:2023-12-01 15:37:31 28 4
gpt4 key购买 nike

这是序言部分:

?- use_module(library(clpfd)).
true.

?- Large #>= Small, Small #> 0, length([1, 2], Large).
Large = 2,
Small in 1..2.

?- Large #>= Small, Small #> 0, length([1, 2], Large), length(List, Small).
Large = 2,
Small = 1,
List = [_5770] ;
Large = Small, Small = 2,
List = [_5770, _5776] ;
^CAction (h for help) ? abort
% Execution Aborted
?- Large #>= Small, Small #> 0, length([1, 2], Large), label([Small]), length(List, Small).
Large = 2,
Small = 1,
List = [_4464] ;
Large = Small, Small = 2,
List = [_4478, _4484].

?-

第一个查询工作正常。一旦枚举了所有解决方案,第二个查询将永远循环。第三个查询有效,但我不知道为什么。

这只是 clpfd 的工作方式吗,我总是需要在尝试使用约束变量之前调用标签?

最佳答案

从某种意义上说,发生这种情况是因为您使用的 clpfd“太少”:在当前的 Prolog 系统中,length/2 没有考虑未决约束!

我将实现 length/2 的变体作为一个挑战。但理想情况下,它也应该与 CLP(B)、CLP(Q) 等一起使用!让求解器一般与此类谓词合作的方法尚不清楚。

关于prolog - 为什么我需要运行 clpfd :label/1 for my query to terminate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50980924/

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