在 Clojure 中定义自然数的惰性序列很容易:(def N (iterate inc 0))
. 不出所料,如果我们要求 Clojure 使用 找到 N 的最小值(apply min N)
,它就会陷入无限回归。
(= 0 (min N))
有没有办法在N 的数据结构中“构建”这一事实?隐含地,我们知道这一点,因为增量函数inc
是严格递增的。该min
函数不知道如何利用这些知识,而是试图以暴力方式找到答案。
我不知道如何以编程方式对此进行编码。我想要一种方法来构造具有附加结构(如约束和关系)的惰性序列)。我还想要一种利用这些约束来解决优化问题的方法(比如找到序列的最小值或下确界)。
有没有办法在原生 Clojure 中做到这一点?Datomic怎么样?