我如何帮助Clojure理解0是最小的自然数?
在Clojure中定义自然数的惰性序列很容易:我如何帮助Clojure理解0是最小的自然数?,clojure,mathematical-optimization,relation,minimum,datomic,Clojure,Mathematical Optimization,Relation,Minimum,Datomic,在Clojure中定义自然数的惰性序列很容易:(def N(iterate inc 0))。不出所料,如果我们让Clojure使用(apply min N)找到N的最小值,它就会陷入无限回归 有没有办法将(=0(min N))这一事实“内置”到N的数据结构中?隐式地,我们知道这一点,因为增量函数inc是严格递增的。min函数不知道如何利用这些知识,而是试图通过暴力手段找到答案 我不知道如何以编程方式对其进行编码。我想要一种方法来构造具有附加结构(如约束和关系)的惰性序列。我还想找到一种利用这些约
(def N(iterate inc 0))
。不出所料,如果我们让Clojure使用(apply min N)
找到N的最小值,它就会陷入无限回归
有没有办法将(=0(min N))
这一事实“内置”到N的数据结构中?隐式地,我们知道这一点,因为增量函数inc
是严格递增的。min
函数不知道如何利用这些知识,而是试图通过暴力手段找到答案
我不知道如何以编程方式对其进行编码。我想要一种方法来构造具有附加结构(如约束和关系)的惰性序列。我还想找到一种利用这些约束来解决优化问题的方法(比如寻找序列的最小值或下确界)
在本地Clojure中有这样做的方法吗?如何使用?您可以将元数据用于您的特定示例
(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
如果您需要更一般化的东西,您可能需要考虑创建自己的类型。Datomic在这方面适合什么?您是否正在尝试存储额外的约束?