Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何帮助Clojure理解0是最小的自然数?_Clojure_Mathematical Optimization_Relation_Minimum_Datomic - Fatal编程技术网

我如何帮助Clojure理解0是最小的自然数?

我如何帮助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函数不知道如何利用这些知识,而是试图通过暴力手段找到答案 我不知道如何以编程方式对其进行编码。我想要一种方法来构造具有附加结构(如约束和关系)的惰性序列。我还想找到一种利用这些约

在Clojure中定义自然数的惰性序列很容易:
(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在这方面适合什么?您是否正在尝试存储额外的约束?