Tom*_*tta 9 clojure mathematical-optimization minimum relation datomic
在Clojure中很容易定义一个懒惰的自然数序列:(def N (iterate inc 0)).不出所料,如果我们要求Clojure找到N的最小值(apply min N),它会陷入无限回归.
有没有办法"建立" (= 0 (min N))N的数据结构这一事实?隐含地,我们知道这一点,因为增量函数inc是严格增加的.该min功能不知道如何利用这些知识,而是试图强行解决问题.
我不知道如何以编程方式编码.我想用一种方法来构造具有附加结构的惰性序列,如约束和关系).我还想要一种方法来利用这些约束来解决优化问题(比如找到序列的最小值或下限).
有没有办法在原生Clojure中做到这一点?怎么样用Datomic?
您可以使用元数据作为您拥有的特定示例.
(defn my-range
([] (my-range 0))
([n] (with-meta
(cons n (lazy-seq (my-range (inc n))))
{:onlyincreases true})))
(defn my-min [x] (if (:onlyincreases (meta x)) (first x) (min x)))
(my-min (my-range)) ;; => 0
(my-min (next (my-range))) ;; => 1
(my-min (nnext (my-range))) ;; => 2
Run Code Online (Sandbox Code Playgroud)
如果您需要更通用的内容,则可能需要考虑创建自己的类型.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |