问题标签 [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 - Prolog 中的可逆数值计算
在阅读 SICP 时,我遇到了逻辑编程第 4.4 章。然后我开始研究 Prolog 编程语言并尝试理解 Prolog 中的一些简单任务。我发现 Prolog 似乎在数值计算方面有问题。
这是标准 Prolog 中阶乘的计算:
我发现的问题是我需要引入两个辅助变量 (C
和D
)、一个新语法 ( is
) 并且问题是不可逆的(即f(5,X)
按预期工作,但是f(X,120)
没有)。
天真地,我希望至少C is A-1, f(C, D)
上面可以替换为f(A-1,D)
,但即使这样也行不通。
我的问题是:为什么我需要在数值计算中而不是在其他查询中做这些额外的“东西”?
我确实理解(SICP 对此非常清楚)一般而言,关于“做什么”的信息不足以回答“如何做”的问题。因此,(至少一些)数学问题中的陈述性知识不足以实际解决这些问题。但这引出了下一个问题:Prolog 中的这些额外“东西”如何帮助我将公式限制在“做什么”足以回答“如何做”的那些问题上?
prolog - Prolog 初学者:如何与算术比较运算符统一或如何将一组 var 设置为值范围
我是 Prolog 的新手。我需要编写一个整数加法器,它将 0-9 之间的数字与其他数字 0-9 相加并产生一个解决方案 0-18。这就是我想要做的:
我希望能够这样称呼它:
要检查它是否是有效的添加:
缺少一个变量:
有多个缺失变量:
我意识到这可能是一个非常简单的问题,而且可能非常简单。但是,根据我正在使用的Prolog 教程:
“与统一算术比较运算符不同,运算符不能用于为变量赋值。只有在每边的每个术语都已实例化时才能评估。”
prolog - Prolog初学者:如何为谓词中的每个变量创建唯一值
我有一个序言谓词:
我现在想实现AddUnique
它将为列表中的所有内容返回唯一值,除非我给它两次变量。
以下是逻辑上等价的内容:
?- AddUnique([A, B, C], 10).
相当于:?- Add([A, B, C], 10), A != B, B != C, A != C.
和:
?- AddUnique([A, B, B], 10).
相当于:?- Add([A, B, B], 10), A != B.
还:
?- AddUnique([A, B, B], 10).
不等于:?- Add([A, B, B], 10), A != B, B!=B.
如果?- AddUnique([A,B,C,D], 4).
给出它应该返回 false,因为它不能带有加到四的唯一正整数。
如果?- AddUnique([A,A,A,A], 4).
给出它应该返回A=1
。
问题:如何A != B, B != C, A != C.
在不执行此类操作的情况下移动谓词内的逻辑A != A
?
wolfram-mathematica - 寻找 21 变量不等式的界限
我对 21 个变量有以下不等式:
http://pastebin.com/raw.php?i=FTU970Em
当我对此运行“Reduce[ineq,Integers]”时,Mathematica 会挂起很长时间。
这是有道理的:x[1]..x[21] 有许多满足不等式的值集。
我真正想要的只是每个变量的界限(例如,每个 i 的“2 <= x[i] <= 7”)。
我怎样才能通过 Mathematica 有效地得到这个?有没有更好的程序呢?
注意:这是较大项目的一部分:
整个可怕的不平等列表:http: //pastebin.com/CyX9f70J
在上面运行“Reduce[ineq,Integers]”会产生“false”,所以我可能翻译错误: http ://conquerclub.barrycarter.info/ONEOFF/7460216.html
algorithm - 调度程序的算法是什么
我有这个安排任务的问题。每个任务都有一个建议的开始时间 T(它需要从 [T-10, T+10] 开始),需要 L 分钟才能完成并使用许多资源 [R1, R2,...]。当资源被使用时,没有其他任务可以使用它。鉴于只有开始时间是灵活的,我的目标是安排任务,以便他们可以访问他们需要的任何资源或指出所有需要解决的冲突。
我可以为此目的使用哪种算法?谢谢你。
prolog - SWI-Prolog 和约束,库 CLP(FD)
我正在使用 clpfd 库处理(swi)序言中的约束。
我试图确定一组约束何时封装或包含另一组,例如 X<4 封装 X<7,因为只要前者为真,后者为真。这可以很容易地用逻辑暗示来表示。但是,我无法让 #==> 运算符给我想要的结果,所以我求助于使用 not(Co1 #/\ #\Co2) ,其中 Co1 和 Co2 是约束。这对于单个约束很好,但是我想将约束的结合传递给 Co1 和 Co2。
现在问题来了。当我尝试
我回来
(奇怪的是,在 Sicstus 中这样做会导致分段错误)
当我通过
我得到了想要的
显然,我不能将后者传递给 not(Co1 #/\ #\Co2),但前者并没有给我想要的结果。谁能解释为什么这两种方法会产生不同的结果,以及如何让前者像后者一样行事?
java - 统一 - 结果无限
我正在开发(在 Java 中),为了好玩,一个使用统一算法的应用程序。
我选择我的统一算法返回所有可能的统一。例如,如果我尝试解决
添加(X,Y)=成功(成功(0))
它返回
{X = succ(succ(0)), Y = 0}, {X = succ(0), Y = succ(0)}, {X = 0, Y = succ(succ(0))}
然而,在某些情况下,可能存在无限多的统一(例如 X > Y = true)。
有人知道算法允许确定是否可能遇到无限数量的统一吗?
提前致谢
prolog - 可逆的“二进制到数字”谓词
以可逆方式将二进制位(例如,它可能是 0/1 的列表)转换为数字的最佳方法是什么?我在 swi 中写了一个本地谓词,但有更好的解决方案吗?最好的祝福
prolog - Prolog 中的简单 nth1 谓词
使用 SWI Prolog,有一个谓词可以在名为 nth1 的列表中找到第 n 个项目。我想实现我自己的谓词版本,但是如果您查看清单(nth1)代码,SWI 就非常复杂。有没有更简单的方法呢?
谢谢 :)。
prolog - 序言;尝试使斐波那契更有效?
这种逻辑编程真的让我的命令式编程技能跳了起来。这是作业,所以请不要让我回答。这就是我所拥有的:
我想制作另一个看起来像这样的功能;fib(N,Value,LastValue)
.
N
是第 n 个数字,value 是返回值。我不明白如何使用累积来重写它。而且由于它倒数,我看不出它如何在计算任何东西之前“知道”最后一个值。:s 任何输入表示赞赏。