如何将相同的参数应用于clojure中的函数调用列表?
假设我想将参数p1和p2应用于函数调用列表:如何将相同的参数应用于clojure中的函数调用列表?,clojure,Clojure,假设我想将参数p1和p2应用于函数调用列表: (defn some-func [] (let [p1 a p2 b] (f1 p1 p2) (f2 p1 p2) (f3 p1 p2) ... )) 做这件事的好方法和简洁方法是什么?您可能需要回顾一下。我可以做你想做的事 不过要注意,juxt有点晦涩难懂,可能会使您的代码难以阅读。您可能需要查看。我可以做你想做的事 不过要小心,juxt有点晦涩难懂,会让你很难读懂你的代码。假设你只想要副作用,我会使用doseq来
(defn some-func []
(let [p1 a p2 b]
(f1 p1 p2)
(f2 p1 p2)
(f3 p1 p2)
...
))
做这件事的好方法和简洁方法是什么?您可能需要回顾一下。我可以做你想做的事
不过要注意,juxt
有点晦涩难懂,可能会使您的代码难以阅读。您可能需要查看。我可以做你想做的事
不过要小心,
juxt
有点晦涩难懂,会让你很难读懂你的代码。假设你只想要副作用,我会使用doseq
来强制调用;
迭代要调用的函数。e、 g
user=> (doseq [f [println println println]] (f 1))
1
1
1
nil
假设您只需要副作用,我会使用
doseq
强制调用;
迭代要调用的函数。e、 g
user=> (doseq [f [println println println]] (f 1))
1
1
1
nil
您可以使用
for
或map
,两者都返回clojure.lang.LazySeq
。小型工作示例:
(defn f1 [x y] (+ x y))
(defn f2 [x y] (- x y))
(defn f3 [x y] (* x 1))
;; Method 1 - for
(for [f [f1 f2 f3]]
(f 10 5))
;; => (15 5 50)
;; Method 2 - map
(map #(% 10 5) [f1 f2 f3])
;; => (15 5 50)
您可以使用
for
或map
,两者都返回clojure.lang.LazySeq
。小型工作示例:
(defn f1 [x y] (+ x y))
(defn f2 [x y] (- x y))
(defn f3 [x y] (* x 1))
;; Method 1 - for
(for [f [f1 f2 f3]]
(f 10 5))
;; => (15 5 50)
;; Method 2 - map
(map #(% 10 5) [f1 f2 f3])
;; => (15 5 50)
juxt返回一个向量。我真正想要的是按顺序调用这些函数。我尝试过(lazy seq(juxt…),但它说“不能将lazyseq转换为IFn”。例如,如何将vec转换为IFn?请阅读上面两个链接上的文档,特别是第二个链接到clojuredocs的文档。orgjuxt返回一个向量。我真正想要的是按顺序调用这些函数。我试过了(lazy seq(juxt…),但上面写着“不能将lazyseq转换为IFn”。也就是说,如何将vec转换为IFn?阅读上面两个链接上的文档,特别是第二个链接到clojuredocs。或者如果你接受了一些问题的答案,那就太好了。你想仅仅为了“副作用”而应用这些功能吗或者您想使用它们的返回值?如果您接受了一些问题的答案,那就太好了。您想仅仅为了“副作用”而应用这些函数,还是想使用它们的返回值?