gpt4 book ai didi

clojure - 如何创建一个函数,在向量中的每对元素之间插入一个元素

转载 作者:行者123 更新时间:2023-12-02 06:50:54 25 4
gpt4 key购买 nike

我想编写一个函数,在向量中的现有元素之间插入元素。插入的元素是其前后元素的函数,第一个和最后一个元素不受影响。

例如我希望插入的元素是它之前和之后的元素的平均值:

输入:

[1 10 15]

输出:

[1 5.5 10 12.5 15]

在 Clojure 中执行此操作的最佳方法是什么?

最佳答案

另一种方式:

(defn insert-mean-between [xs]
(let [f (fn [x y]
[(* (+ x y) 0.5) y])]
(->> xs
(partition 2 1)
(mapcat (partial apply f))
(cons (first xs))
vec)))

(insert-mean-between [1 10 15])
;;=> [1 5.5 10 12.5 15]

主要的 技巧f 返回答案和 RHS 输入。这样以后他们都会一起作曲,不重复。您将遇到的唯一问题是缺少第一个元素。所以我们只是把它放在前面。从一开始我们就必须知道,当我们选择返回 RHS 而不是 LHS 时,cons 将是一个方便的操作。

由于计算平均值只是一个例子,一个改进的解决方案是插入独立于平均值/任何函数:

(defn calc-mean [x y] (* (+ x y) 0.5) 
(insert-between calc-mean [1 10 15])

那么一个更通用的插入函数可能是:

(defn insert-between [g xs]
(->> xs
(partition 2 1)
(mapcat (fn [[x y]] [(g x y) y]))
(cons (first xs))))

关于clojure - 如何创建一个函数,在向量中的每对元素之间插入一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44869270/

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