问题标签 [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.
floating-point - 在序言中将浮点数转换为整数
如何在序言中将浮点数转换为整数?
我试过:
prolog - 序言,测试(X,Y,Z):- Y 是 X + Z
当我只知道 X 时,如何在序言中获得 Y 和 Z?
例如:
但错误:
prolog - 在 prolog 中定义多个规则的最短方法
我正在尝试解决一个练习,以便更熟悉序言。
任务如下:
我已经解决了那个练习,但我猜有点笨重。我的代码是:
有人可以建议一种更好的方法来初始化这些规则吗?例如在 Haskell 中,我可以这样做:
提前致谢。
algorithm - 网球比赛日程安排
球员数量有限,网球场数量有限。在每一轮中,最多可以有与球场一样多的比赛。没有人会不间断地进行 2 轮比赛。每个人都与其他人进行比赛。制定尽可能少的轮次的时间表。(由于每个人都必须在回合之间休息的规则,因此可能会有没有比赛的回合。)5名球员和2个球场的输出可能是:
在此输出中,列和行是玩家编号,矩阵内的数字是这两个玩家竞争的轮数。
问题是找到一种算法,可以在可行的时间内为更大的实例执行此操作。我们被要求在 Prolog 中执行此操作,但任何语言的(伪)代码都是有用的。
我的第一次尝试是一个贪心算法,但它给出了太多轮次的结果。然后我建议了一个迭代加深深度优先搜索,我的一个朋友实施了,但在小到 7 个玩家的实例上仍然花费了太多时间。
(这是来自一个古老的考试问题。与我交谈过的人都没有任何解决方案。)
prolog - Prolog 中的密码求解器
我必须解决一个看起来像这样的密码:
其中变量的长度可能不同。重复也可能不同(如 0.XYZXYZ ...)。我写了一段我认为可以工作的代码,但它没有:
我将其执行为 crypt([A,B,C], [D,E,F], [G,H])。我认为它至少可以解决 ABC / DEF = GH 只是为了拥有工作解决方案的任何部分,但它不起作用。
即使对于一个示例输入,我也不知道该怎么做。我不知道如何表示 0.GHGHGH....
编辑: mn/2 用于将数字列表转换为数字([1,2,3] -> 123)。
prolog - Prolog Noob:SWI-Prolog 中的约束编程库或语法问题
我只是想弄清楚 SWI-Prolog 中的约束编程,查看本教程:http ://en.wikibooks.org/wiki/Prolog/Constraint_Logic_Programming
但是,我似乎在第一个障碍上掉下来了。
这里出了什么问题?我似乎已经包含了该库,但是本教程的第一行示例会引发语法错误。
我能找到的所有教程似乎都使用了#=、#< 等运算符。但我的 SWI-Prolog 对它们望而却步。它们是该约束库附带的额外语法吗?(我没有加载它吗?)
还是我误读了教程示例?
更新:试图从下面 Horsh 的回复中理解事情。如果我使用库并在交互式终端中运行该行,我可以让它工作。但是,如果我尝试导入库并在源文件中使用这些运算符,则会再次引发错误。我不明白什么?
更新 2:
好的。如果在我的源文件中调用库,然后编写一个包含#> 的规则。然后我尝试从命令行查询它。它将抛出一个错误并且 #> 语法无法识别。如果在尝试查阅程序之前将库导入命令行,它可以工作。这可能是对的吗?
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 似乎确定没有解决方案。但是还有:
我已经搜索了代码以查找错字或错位的列,但一直无法找到其来源。有任何想法吗?
prolog - 如何写好谓词(不是介于)
我写代码如下
它运作良好,但我认为它效率不高
非常感谢 :)
prolog - Prolog 密码算术谜题
我被要求使用 Prolog 解决一个密码算术难题:
上面是谜题,我不知道问题出在哪里,结果总是返回false。另外,我不允许在 SWI-Prolog 中使用任何库。
示例查询:
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)
是否有任何解决方案可以以比等等更简单的方式获取列表的元素(它们是列表) ?