- contrib等の外部ライブラリを使用しないで
- 同じ関数は1回だけ使えて(使用した関数内部で他の関数が呼ばれるのはよい)
- ループや再帰等の無限実行はせずに
- マクロによる多重実行もせずに
- 元の値(下記例では9)を取得可能
といった条件とすると
deref_sample.clj
(with-local-vars [x (promise)
y (future-call (fn [] x))
z (reify clojure.lang.IDeref (deref [this] y))]
(deliver x (-> 9 ref atom agent delay future reduced))
(str @@@@@@@@@@@@z))
12回はできた。