gpt4 book ai didi

clojure - 在每个相邻元素上调用函数时将序列缩减为更短的序列

转载 作者:行者123 更新时间:2023-12-02 00:09:08 26 4
gpt4 key购买 nike

我有一个函数可以查看其中两个对象,执行一些神秘的逻辑,然后返回其中一个或两个(作为一个序列)。

我有这些对象的序列 [o1 o2 o3 o4 ...],我想返回这样处理的结果:

  • 调用 o1 和 o2 的神秘函数
  • 保留你目前所拥有的butlast
  • 取上一个神秘函数结果的last,并在其上调用神秘函数,然后o3
  • 保留你目前所拥有的butlast
  • 取上一个神秘函数结果的last,并在其上调用神秘函数,然后o4
  • 保留你目前所拥有的butlast
  • 取上一个神秘函数结果的last,并在其上调用神秘函数,然后oN
  • ....

这是我到目前为止所得到的:

; the % here is the input sequence
#(reduce update-algorithm [(first %)] (rest %))

(defn update-algorithm
[input-vector o2]
(apply conj (pop input-vector)
(mystery-function (peek input-vector) o2)))

写这个的惯用方式是什么?我不喜欢这个样子。我认为 apply conj 有点难以阅读,第一行的 [(first %)] (rest %) 也是如此。

最佳答案

into 将是比 apply conj 更好的选择。

我认为 [(first %)] (rest %) 还不错。可能是写这个的最短方法,它完全清楚减少的种子和减少的序列是什么。

此外,reduce 与手头的任务完美匹配,不仅在它有效的意义上,而且在任务的意义上/折叠。类似地,poppeek 完全按照它们的目的“保持 butlast”和“获取 last"已累积的内容(在向量中)。随着 into 的更改,代码基本上讲述了与规范相同的故事,而且用更少的文字来引导。

所以,不,没有办法改善这一点,抱歉。 ;-)

关于clojure - 在每个相邻元素上调用函数时将序列缩减为更短的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16488423/

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