问题标签 [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.
prolog - 使用 clpfd Prolog 库解决斑马谜题(又名爱因斯坦谜题)
我得到了一个练习来使用我选择的约束求解器来解决斑马难题,我使用Prolog clpfd library进行了尝试。
我知道在 Prolog 中还有其他更惯用的方法来解决这个问题,但这个问题是专门关于clpfd
包的!
因此,我试图解决的难题的具体变体(鉴于其中有很多)是这个:
有五间房子
- 英国人住在红房子里
- 瑞典人养狗
- 丹麦人喜欢喝茶
- 绿房子留给白房子
- 温室的主人喝咖啡
- 抽 Pall Mall 的人拥有一只鸟
- 中间屋喝牛奶
- 黄房子的主人抽登喜路
- 挪威人住在第一所房子里
- 万宝路吸烟者住在猫主人旁边
- 马主住在抽登喜路的人旁边
- 温菲尔德吸烟者喜欢喝啤酒
- 挪威人住在蓝屋旁边
- 德国人抽罗斯曼烟
- 万宝路吸烟者有一个喝水的邻居
我试图用以下方法解决它:
房子可以拥有的每个属性都被建模为一个变量,例如“British”、“Dog”、“Green”等。属性可以取 1 到 5 的值,具体取决于它们所在的房子,例如,如果变量“狗”取值3,狗住在第三宫。
这种方法可以很容易地模拟这样的邻居约束:
但不知何故,clpfd
即使(IMO)问题被正确建模(我使用与Choco 约束求解器完全相同的模型,结果是正确的),该包也没有产生解决方案。
这是完整的代码:
我是否误解了 中的概念clpfd
,或者我只是在这里遗漏了一些明显的东西?如果有帮助,您可以在这里找到使用 Choco 和 Scala 实现的相同方法。
编辑:我认为求解器无法解决问题的原因在于它从来没有为变量提供明确的值,而只是提供范围,例如“Fish 1..3\/5”。
list - 如何获得序言中给定数字的总和?
我是 prolog 的新手,我正在做一些练习。所以我试图得到一个列表中给定数字的总和。我正在尝试使用这个:
(从这里)
作为我的向导。所以这是我得到总和的代码:
当我编译它时,它说
practice.pl:3:可评估
listsum(_G139,_G140)
的不存在
practice.pl:2:单例变量:[X]
然后当我尝试listsum(0, [1,2,3]).
它返回时false
。
我仍然不太了解prolog,以及prolog中的列表和递归。
prolog - 如何在 Prolog 中添加多项式?
我有以下任务:
编写一个将添加两个多项式的方法。即 0+2*x^3 和 0+1*x^3+2*x^4 将给出 0+3*x^3+2*x^4。
我还写了以下代码:
我的问题是我不知道如何停止。我想在一个参数为空时停止,而不是将第二个参数附加到第三个参数。但是我如何检查它们是否为空?谢谢。
prolog - 在 Prolog 中计算立方体列表
所以我在 SWI-Prolog 中做一些 Prolog,我遇到了一些障碍。给定一个输入列表,我必须创建一个多维数据集列表。我目前拥有的代码是
当我运行它时,它会给出一个错误,特别是......
我不完全确定为什么会发生这个错误,但它似乎发生在最后一行,Cubes is NewCubes。任何帮助表示赞赏:)
prolog - 第二端视图谜题,Prolog
我在 swi-prolog 中编写代码来解决 Second End View Pazzles 7*7(例如http://www.funwithpuzzles.com/2009/10/abcd-second-end-view-ev4.html像这样 5*5)数字 1-6
我需要如何编写逻辑来解决它,也许是 4*4 或 5*5 的更简单的例子。我会很乐意提供任何帮助。我需要为 3 次测试编写它,但即使是一次也很重要。
prolog - gnu Prolog 上的 EndView 游戏
一般问题:我们有 8*8 的地图,我们必须用 1 到 6 的数字填充空方格。但是在每一列中,原始数字只能满足 1 次。每行和每列中的两个方格都留空。两边的数字,上下显示我们应该出现的第一个数字(但它可以出现在两个空方块之后)。
所以,现在我有了这个代码,它最终适用于 4*4 地图的 swi-prolog。
但是,它不支持更大面积的 2 个空白位置的问题,例如 8*8 拼图。有什么提示吗?
prolog - 如何在 Prolog 中编写条件规划?
我试图编写一个可以理解用 C# 编写的学生程序的 prolog 代码。现在我被困在识别学生程序中的“if”语句的过程中。例如:以下是我期望学生提供的代码。
我将这个预期代码的目标定义为:
问题是我如何在 prolog 事实和规则中表示上述学生代码,以找出任何可能的条件都满足目标。
我试图将学生代码的第一部分更改为如下所示的事实,但真的不知道如何将学生的“if”语句表示为 prolog 中的事实/规则(我想,我不应该将其更改为 prolog “如果”,对吧?)
另一个,在我的目标中,当我进行比较时,例如gt(Vd,0)
我认为我不能使用序言大于运算符,也Vd> 0
不会Vd @> 0
导致 Vd 中的值实际上是用户输入的某个值,但它表示为符号值(在这种情况是:)val_d
。
注意:使用上述目标,我认为如果将学生代码更改为以下代码,则可以满足定义的目标。
或者
但同样,我需要帮助/想法如何在序言中将此代码表示为操作/规则/事实以实现目标。
非常感谢任何帮助。
非常感谢
prolog - 试图通过递归计算步数?
这是一个立方体,它的边缘是有方向的;它只能从左到右,从后到前,从上到下。
使用下面的方法,我们可以检查是否可以从 AH 出发,例如:cango(A,H)。
使用 move2,我正在尝试执行所需步骤的计数。
我将如何实现这一点?
prolog - 关系运算符在 prolog 中用于变量
我正在编写以下代码并给出完美的结果。
如果我像这样查询
我确实得到了正确的回应。但是不,我希望得到 D<50 的结果,比如说。怎么做?
numbers - prolog 将数字转换为罗马数字
我有这个将整数转换为罗马数字的代码我需要添加一个函数,将整数与罗马数字输入进行比较,并显示它是 try 还是 false,例如:roman(v,5)。真的