我有一個表示爲地圖的遊戲狀態和一些更新每個遊戲'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