【发布时间】:2012-08-03 18:42:48
【问题描述】:
如何表达n 变量从一组n 值中获取不同值的约束?
例如,也许我想搜索表单的表达式
(op1 a (op2 b c))
具有最大值时,a、b 和 c 应该是 1、2 和 3(按某种顺序),而 op1 和 op2 都可以是 * + - / exp 中的任何值?
我可以看到如何使a 具有来自1 2 3 的值(例如使用conde)。 b 和 c 也是如此。但是那我如何排除平等呢?我是否需要遍历所有组合并明确排除它们?
显然我可以“手动”进行排除,但我想知道是否有更好(更有效)的方法,或者包含此类内容的支持库(我对线性编程库和通常他们有一堆帮助函数来解决这些常见的情况)。
将其推广到某些值可以出现一定次数的情况似乎会很麻烦......
现在我想一想,如何搜索最大值?有没有这方面的好书或笔记?!
[我正在使用 clojure,但我的理解是 clojure-core.logic 和 minikanren 几乎相同]
更新:任何阅读此问题的人都在寻找好的介绍,请查看我在下面的评论中提到的Alvis paper。
【问题讨论】:
标签: clojure scheme clojure-core.logic minikanren