原子交换存储无限懒惰序列的原子

时间:2018-12-01 15:39:28

标签: clojure lazy-evaluation

要么我已经精疲力尽,无法思考,或者这是不可能的,但是我想swap!引用一个原子,该原子用rest表示一个无限的懒惰序列。当前其中的seq

我的程序由于明显的原因而挂起,因为compare-and-set!尝试在交换之前检查先前和新的seq相等性。平等检查基本上永远不会终止

关于如何实现这一目标的任何线索?

(def  beyond-infinity (atom (repeat 1)))
(defn keep-pulling [] (swap! beyond-infinity #(rest %)))

编辑

以前,我的懒惰序列在range中起作用,但是在REPL上,由于实现了返回的序列,我的REPL被挂起了

无论如何,repeat仍然失败

1 个答案:

答案 0 :(得分:3)

问题是因为我的REPL试图实现无限序列。 我提到的关于compare-and-set!进行seq相等性检查的事情也是错误的。 compare-and-set!进行引用相等性测试,而不是值!