问题标签 [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 投票
2 回答
14483 浏览

floating-point - 在序言中将浮点数转换为整数

如何在序言中将浮点数转换为整数?

我试过:

0 投票
2 回答
1375 浏览

prolog - 序言,测试(X,Y,Z):- Y 是 X + Z

当我只知道 X 时,如何在序言中获得 Y 和 Z?

例如:

但错误:

0 投票
3 回答
1721 浏览

prolog - 在 prolog 中定义多个规则的最短方法

我正在尝试解决一个练习,以便更熟悉序言。

任务如下:

我已经解决了那个练习,但我猜有点笨重。我的代码是:

有人可以建议一种更好的方法来初始化这些规则吗?例如在 Haskell 中,我可以这样做:

提前致谢。

0 投票
6 回答
9197 浏览

algorithm - 网球比赛日程安排

球员数量有限,网球场数量有限。在每一轮中,最多可以有与球场一样多的比赛。没有人会不间断地进行 2 轮比赛。每个人都与其他人进行比赛。制定尽可能少的轮次的时间表。(由于每个人都必须在回合之间休息的规则,因此可能会有没有比赛的回合。)5名球员和2个球场的输出可能是:

在此输出中,列和行是玩家编号,矩阵内的数字是这两个玩家竞争的轮数。

问题是找到一种算法,可以在可行的时间内为更大的实例执行此操作。我们被要求在 Prolog 中执行此操作,但任何语言的(伪)代码都是有用的。

我的第一次尝试是一个贪心算法,但它给出了太多轮次的结果。然后我建议了一个迭代加深深度优先搜索,我的一个朋友实施了,但在小到 7 个玩家的实例上仍然花费了太多时间。

(这是来自一个古老的考试问题。与我交谈过的人都没有任何解决方案。)

0 投票
2 回答
703 浏览

prolog - Prolog 中的密码求解器

我必须解决一个看起来像这样的密码:

其中变量的长度可能不同。重复也可能不同(如 0.XYZXYZ ...)。我写了一段我认为可以工作的代码,但它没有:

我将其执行为 crypt([A,B,C], [D,E,F], [G,H])。我认为它至少可以解决 ABC / DEF = GH 只是为了拥有工作解决方案的任何部分,但它不起作用。

即使对于一个示例输入,我也不知道该怎么做。我不知道如何表示 0.GHGHGH....

编辑: mn/2 用于将数字列表转换为数字([1,2,3] -> 123)。

0 投票
3 回答
3350 浏览

prolog - Prolog Noob:SWI-Prolog 中的约束编程库或语法问题

我只是想弄清楚 SWI-Prolog 中的约束编程,查看本教程:http ://en.wikibooks.org/wiki/Prolog/Constraint_Logic_Programming

但是,我似乎在第一个障碍上掉下来了。

这里出了什么问题?我似乎已经包含了该库,但是本教程的第一行示例会引发语法错误。

我能找到的所有教程似乎都使用了#=、#< 等运算符。但我的 SWI-Prolog 对它们望而却步。它们是该约束库附带的额外语法吗?(我没有加载它吗?)

还是我误读了教程示例?

更新:试图从下面 Horsh 的回复中理解事情。如果我使用库并在交互式终端中运行该行,我可以让它工作。但是,如果我尝试导入库并在源文件中使用这些运算符,则会再次引发错误。我不明白什么?

更新 2:

好的。如果在我的源文件中调用库,然后编写一个包含#> 的规则。然后我尝试从命令行查询它。它将抛出一个错误并且 #> 语法无法识别。如果在尝试查阅程序之前将库导入命令行,它可以工作。这可能是对的吗?

0 投票
2 回答
5292 浏览

prolog - Prolog 中的迷你数独求解器中途停止

我正在研究“七周内的七种语言”,我只是想从书中找到一个例子。它解决了一个迷你数独网格(4x4)。

作者使用的是 gprolog,但我使用的是 swi-prolog(无论出于何种原因,我都无法让 gprolog 在我的 VM 上工作,但 swi-prolog 第一次尝试工作)。

我在 VirtualBox 4.0.4 r70112 中运行 Ubuntu 10.04(希望这不太相关!)

这是我的序言文件中的代码:

我(故意)改变的唯一部分是:

  • use_module(library(clpfd)).在顶部添加
  • 更改fd_all_different(Head),all_different(Head),
  • 更改fd_domain(Puzzle, 1, 4),Puzzle ins 1..4,

这是来自 swipl 的调用

解决方案一直是正确的,直到它被切断,此时 prolog 似乎确定没有解决方案。但是还有:

我已经搜索了代码以查找错字或错位的列,但一直无法找到其来源。有任何想法吗?

0 投票
1 回答
399 浏览

prolog - 如何写好谓词(不是介于)

我写代码如下

它运作良好,但我认为它效率不高

非常感谢 :)

0 投票
2 回答
2010 浏览

prolog - Prolog 密码算术谜题

我被要求使用 Prolog 解决一个密码算术难题:

上面是谜题,我不知道问题出在哪里,结果总是返回false。另外,我不允许在 SWI-Prolog 中使用任何库。

示例查询:

0 投票
1 回答
489 浏览

list - 列表域和标签的序言列表

L=[[X,Y,Z],[1,A,B],[2,C,D]], L ins 1..3, all_different(L), label(L)。

我只想用值填充列表列表中的变量。get_element_at(L,1)是否有任何解决方案可以以比等等更简单的方式获取列表的元素(它们是列表) ?