gpt4 book ai didi

clojure - 通过 Clojure 中的任意函数传输数据

转载 作者:行者123 更新时间:2023-12-03 14:40:24 28 4
gpt4 key购买 nike

我知道-> form 可用于将一个函数结果的结果传递给另一个函数:

(f1 (f2 (f3 x))) 
(-> x f3 f2 f1) ; equivalent to the line above

(取自 excellent Clojure tutorial at ociweb )

但是,这种形式要求您知道在设计时要使用的功能。我想做同样的事情,但在运行时使用任意函数列表。

我已经编写了这个循环函数来完成它,但我觉得有更好的方法:
(defn pipe [initialData, functions]
(loop [
frontFunc (first functions)
restFuncs (rest functions)
data initialData ]
(if frontFunc
(recur (first restFuncs) (rest restFuncs) (frontFunc data) )
data )
) )

解决这个问题的最佳方法是什么?

最佳答案

我必须承认我对 clojure 真的很陌生,我可能完全错过了这里的重点,但这不能使用 comp 和 apply 来完成吗?

user> (defn fn1 [x] (+ 2 x))
user> (defn fn2 [x] (/ x 3))
user> (defn fn3 [x] (* 1.2 x))
user> (defn pipe [initial-data my-functions] ((apply comp my-functions) initial-data))
user> (pipe 2 [fn1 fn2 fn3])
2.8

关于clojure - 通过 Clojure 中的任意函数传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683219/

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