如何表示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.逻辑和小型clojure几乎是一样的
Update:任何阅读这个问题的人如果想得到一个很好的介绍,请查看下面我在评论中提到的阿尔维斯纸。
发布于 2012-08-03 20:14:22
(run* [q]
(fresh [a b c]
(== q [a b c])
(fresh [x y z]
(rembero a '(* + / - exp) x)
(rembero b x y)
(rembero c y z))))https://stackoverflow.com/questions/11801502
复制相似问题