gpt4 book ai didi

clojure - 如何在 Clojure 中创建部分函数列表?

转载 作者:行者123 更新时间:2023-12-02 10:34:46 24 4
gpt4 key购买 nike

我需要在 clojure 中编写这样的代码。

-- haskell
fns = map (,) [1..3]
head fns $ 1
-- => (1,1)
fns <*> [1..3]
-- => [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]

不起作用

(def fns (map (partial list) (range 1 3)))
((first fns) 1)
;; => ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn

可行,但我认为这不是惯用的方式

(def fns (map (fn [x] `(partial list ~x)) (range 1 3)))
((eval (first fns)) 1)
;; => (1 1)

最佳答案

函数(部分列表)相当于函数list。它不像 haskell,所有东西都被柯里化(Currying) - 我认为你打算 partial 看到它只被赋予一个参数,list,并柯里化(Currying)自己以等待第二个参数。但实际上应该是(partialpartiallist):您正在尝试部分应用函数partial本身。

另请注意,部分应用的函数在 clojure 中并不像在 haskell 中那样常见,部分原因是它们读起来不太好。如果我想构建这样的函数列表,我可能会编写 (for [i (range 1 3) )] (fn [j] (列表 i j))).

关于clojure - 如何在 Clojure 中创建部分函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984514/

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