gpt4 book ai didi

Clojure:使用输出作为下一个操作的输入执行操作 n 次(a-la reduce)

转载 作者:行者123 更新时间:2023-12-01 00:40:15 24 4
gpt4 key购买 nike

我想在给定的时间内执行某个操作(例如,生成一个部落)。每次我都想使用上一次迭代的输出作为下一次迭代的输入。

我通过对 n 个元素的集合进行虚拟 reduce 来实现它,然后我只考虑累加器并从集合中丢弃该元素。

(defn generate-game [world n-tribes]
(let [ game (create-game world)
game (reduce (fn [acc, _] (:game (generate-tribe acc))) game (repeat n-tribes :just_something))]
game))

我认为有更好的方法来做到这一点。你能帮我找到它吗?

最佳答案

如果相同的函数重复 n-tribes 次,则使用 iterate并获取第 n-tribes 个元素应该有效:

(defn generate-game [world n-tribes]
(let [ game (create-game world)
game (nth (iterate generate-tribe game) n-tribes)]
game))

请记住,iterate 创建了一个惰性序列,因此在您请求之前不会计算任何内容。

另一个选项正在应用 comp到函数列表,毕竟这是一个简单的函数组合:

 (generate-tribe (generate-tribe .... (generate-tribe game) ....))

n-tribes times

所以像这样:

(defn generate-game [world n-tribes]
(let [ game (create-game world)
game ((apply comp (repeat n-tribes generate-tribe)) game)]
game))

正是表达了这个想法。

关于Clojure:使用输出作为下一个操作的输入执行操作 n 次(a-la reduce),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25632388/

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