gpt4 book ai didi

design-patterns - 如何在 Clojure 中构造复杂的 "state updating functions"?

转载 作者:行者123 更新时间:2023-12-04 07:18:24 25 4
gpt4 key购买 nike

我有一个表示为 map 的游戏状态和一些更新每个游戏“tic”状态的逻辑。但我无法弄清楚如何以任何理智的方式构建更新函数。

这样构造函数的惯用模式是什么?

这是我想做的一些伪代码:

(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)

我并不真正关心中间状态,但是使用 -> 宏不起作用(因为有一些条件)。

一个有效的方法是使用一个被重置的本地原子!对于更新函数中的每个“行”。但这不可能是它应该做的?!

最佳答案

我建议将每个步骤提取到一个命名良好的函数中,以便您可以使用 ->。伪代码:

(defn tic [g]
(-> g
inc-day
random-weather
grow-trees
...))

对于任何条件逻辑,您都可以执行与您在 g2 步骤中执行的操作类似的操作。

也许你会发现synthread lib有用。我找到了 this video很有启发性。

另请查看 cond->看看你怎么能混合 -> 与一些条件。例如,您的 cond 可能如下所示:

(cond-> g
true (update-in [:day] inc)
(some-cond) some-update-fund
true (update-in [:fu] fu-update))

关于design-patterns - 如何在 Clojure 中构造复杂的 "state updating functions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com