如何表达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 论文。