我正在写一个简单的程序,使用Clojure的STM转换两个整数的值。 我正在使用Lewandowski(http://lewandowski.io/2016/01/clojure-summary/)的功能a06。
我的代码:
(defn trans [p1 p2]
(println "a")
(dosync
(let [newval1 (@p1 + 50)
newval2 (@p2 - 30)]
(do
(println "b")
(ref-set p1 newval1)
(ref-set p2 newval2)))))
(defn main []
(let [p1 (ref 20) p2 (ref 100)]
(do
(future (trans p1 p2))
(future (trans p1 p2))
(Thread/sleep 500))
(println @p1)
(println @p2)))
由于某种原因,我的函数主体没有进入函数trans的“执行部分”。因此,我的输出仅为:
a
a
20
100
=> nil
我添加了“ a”和“ b”来显示我的问题。 很抱歉,如果这是我犯的一个非常简单的错误,但是我根本看不到代码中缺少什么。每个答案都令人感动!谢谢!
答案 0 :(得分:0)
与以下各项进行比较,它们可以正常工作:
sum(hours[1:(length(hours)-1)]==0&hours[2:(length(hours))]!=0)
也就是说,当您的兴趣是副作用时,期货并不是真正理想的工具,而不是以后检索计算本身的结果。