gpt4 book ai didi

clojure - 仅更新与 coll 中的 pred 匹配的第一个元素的惯用方法

转载 作者:行者123 更新时间:2023-12-01 22:26:29 27 4
gpt4 key购买 nike

我有一个 seq,(def coll '([:a 20] [:b 30] [:c 50] [:d 90]))

我想迭代 seq,并仅修改与谓词匹配的第一个元素。

谓词(def pred (fn [[a b]] (> b 30)))

(f pred (fn [[a b]] [a (+ b 2)]) coll) => ([:a 20] [:b 30] [:c 52] [:d 90] )

f 是我想要的 fn,它需要一个 pred,以及一个应用于与 pred 匹配的第一个 elem 的 fn。所有其余的元素都不会被修改并在 seq 中返回。

执行上述操作的惯用方法是什么?

最佳答案

一种可能的方法是使用 split-with 拆分集合,将函数 f 应用于 split-with 返回的第二个集合的第一个元素,并再次将元素连接在一起。

(defn apply-to-first [pred f coll]
(let [[h t] (split-with (complement pred) coll)]
(concat h (list (f (first t))) (rest t))))

请注意,示例中的 pred 函数可能应如下所示:

(def pred #(> (second %) 30))

关于clojure - 仅更新与 coll 中的 pred 匹配的第一个元素的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480331/

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