Clojure のマップ ref のカウンターの更新に取り組んでいます。
(defn increment-key [this key]
(dosync
(let [value (get @this key)]
(if (= value nil)
(alter this assoc key (ref 1))
(alter this assoc key (alter value inc))))))
ただし、alter value inc ステートメントが参照を失っているようです。
(defn -main [& args]
(def my-map (ref {}))
(increment-key my-map "yellow")
(println my-map)
(increment-key my-map "yellow")
(println my-map))
どちらが印刷されますか:
$ lein run
#<Ref@65dcc2a3: {yellow #<Ref@3e0d1329: 1>}>
#<Ref@65dcc2a3: {yellow 2}>
このシナリオで更新中に同じ参照を保持するにはどうすればよいですか?