我有一个表示为地图的游戏状态和一些更新每个游戏'tic'状态的逻辑。但我无法弄清楚如何以任何理智的方式构建更新功能。如何在Clojure中构造复杂的“状态更新函数”?
构建这样的函数的习惯模式是什么?
这里是我想要做的一些伪代码:
(defn tic [g] "Return an updated game"
g1 = (update-in g [:day] inc)
g2 = (if (some-cond) (some-update-func g1) g1)
g3 = (update-in g2 [:fu] fu-update)
... many more ...
g-last)
我真的不关心中间状态,但使用 - >宏不工作(因为有一些条件语句)。
工作的黑客正在使用重置的本地原子!对于更新函数中的每个'行'。但这不可能是它应该如何完成的!
的命名函数的组合,逻辑块,并且synthread LIB看起来像一个很好的解决方案。它有类似于其他答案中描述的'mabey'宏的宏(还有更多)。 – 4ZM