问题标签 [clpfd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
345 浏览

prolog - 如何将变量域定义为非连续范围

我从 SICStus Prolog 开始,我想定义一个变量,比如说StartingTimes,让域由 list 定义[1, 5, 10]

我怎样才能在 SICStus Prolog 中做到这一点?

我会做类似的事情:

但这太可怕了。必须有一个简单的方法来做到这一点。也许fd_sets

注意:我试图找出它是如何在手册中完成的,但是序言使用了常用词,而且很难使用谷歌来做到这一点。

0 投票
2 回答
372 浏览

prolog - 如何将域变量添加到 global_cardinality?

我正在尝试为global_cardinality我的程序添加一个约束,并且在SICStus Prolog 的手册中写道:

global_cardinality(+Xs,+Vals)

global_cardinality(+Xs,+Vals,+Options)

其中 Xs = [X1,...,Xd] 是整数或域变量的列表,Vals = [K1-V1,...,Kn-Vn] 是对的列表,其中每个键 Ki 都是唯一的整数Vi 是域变量或整数。如果 Xs 的每个元素都等于某个键,并且对于每对 Ki-Vi,则 Xs 的 Vi 元素恰好等于 Ki。

现在我可以写:

说这个号码1会被使用两次。该号码2将只使用一次。

但我想说的是,1将使用该数字:once, twice or three times

根据手册,我需要一个域变量,但正确的语法是什么?

0 投票
1 回答
219 浏览

debugging - 如何调试 clpfd 程序?

我在 SICStus Prolog (clpfd) 中有一个程序,我想看看labeling. 我试过trace了,但它太冗长了,很难理解到底发生了什么(什么值分配给了哪些变量,约束是如何传播的,等等)。

我的程序的缩短版本:

感谢您的任何提示!

注意:我也很想删除“域地狱”,但据我了解 Prolog 我不能使用一个变量(例如 Domain_01)。

0 投票
1 回答
922 浏览

prolog - 是否可以将变量的域设置为 clpfd 中的名称枚举?

我可以通过这种方式指定变量的域:

或者

但我有一个变量,我想这样指定:

有可能做到吗?当然,可以将名称编码为整数,但真的有必要吗?

0 投票
2 回答
80 浏览

prolog - 如何缩短以下程序?

我想缩短以下程序。只是成像有几十个变量,而不是只是XY。问题是我需要分别为每个变量定义域。我不喜欢它,因为它使我的程序更长且更不透明。

输入:

结果:

起初我以为我会简单地通过写来解决它:

但它不起作用,因为 Dom1 将(这是 clpfd 中发生的事情的正确术语吗?)统一为一个值,因此唯一的结果是:

谢谢!

0 投票
1 回答
3793 浏览

prolog - Prolog fd_domain 未定义

好的,所以我正在尝试为学校项目编写这个简单的数独求解器。我正在使用 SWI - Prolog,并且正在使用库 clpfd。

当我使用 domain/3 谓词时会出现问题。它没有给出任何语法错误,只有程序返回“false”而不是实际的解决方案。

请原谅我的菜鸟,但我对 Prolog 和声明性语言完全陌生。

这是我的完整代码:

我的查询:

0 投票
1 回答
340 浏览

prolog - 如何为 CLPFD 中的变量赋值?

手册indomain/1中有谓词通过回溯以递增的顺序将值分配给变量(我们称之为 X)。

当我尝试编写自定义标签谓词时,我想更改分配给变量 X 的值的顺序。我想出了这段代码:

但我真的不知道它是否正确。此外,我不确定这是否是正确的方法。

0 投票
1 回答
126 浏览

prolog - 如何在 CLPFD 中为以下场景定义变量?

我有一组变量T_1, T_2, ..., T_N,我想在 CLPFD 中重写以下伪代码:

我怎样才能做到这一点?

我会使用count

但我相信更有经验的程序员不会这样写。

0 投票
2 回答
1668 浏览

prolog - Prolog数独求解器问题

我正在尝试编写数独 9 x 9 求解器。我使用了以下代码:

但是,当我运行查询时:

solve(X,[_,7,2,4,_,_,_,_,1,_,8,_,7,_,_,3,2,_,6,3,1,_,_,_,7,_,_,_,_,_,5,2,_,_,1,4,_,_,5,9,_,4,6,_,_,8,4,_,_,3,7,_,_,_,_,_,9,_,_,_,2,5,3,_,6,8,_,_,5,_,7,_,2,_,_,_,_,9,4,6,_])。

该程序只是挂起。谁能看到我犯了什么错误?谢谢。

编辑:注意到查询中的错误,但是修复后程序仍然挂起

0 投票
2 回答
231 浏览

prolog - 如何指定变量域中值的自定义顺序?

假设我有一个变量V,并且值V可以是 range 中的任何数字0..5。但是,某些值比其他值更受欢迎,因此它将帮助我将域指定V为有序序列。

我可以在 SICStus Prolog 中执行此操作吗?

例子:

我阅读了手册,但没有找到任何有用的东西。我可以通过自定义标签来解决问题(即,将 V 的域转换为列表,对其进行排序并将值分配给V),但我预计性能会更差。