Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中列出部分函数?_Clojure - Fatal编程技术网

如何在Clojure中列出部分函数?

如何在Clojure中列出部分函数?,clojure,Clojure,我需要在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 (fn [x] `(partial list ~x)) (range 1 3))) ((eval (fi

我需要在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 (fn [x] `(partial list ~x)) (range 1 3)))
((eval (first fns)) 1)
;; => (1 1)
函数
(部分列表)
仅相当于函数
列表
。它不像haskell那样,一切都是咖喱化的——我想你是想让
partial
看到它只被赋予了一个参数,
list
,然后咖喱化自己,等待第二个参数。但实际上应该是
(部分列表)
:您正在尝试部分应用函数
partial
本身


还要注意,部分应用的函数在clojure中不像在haskell中那样常见,部分原因是它们的可读性不好。如果我想建立一个这样的函数列表,我可能会编写
(针对[I(范围13)](fn[j](列表I j))

你看了
ClassCastException
告诉你什么了吗?是的。所以,我写了最后一段代码。但是,我认为代码很难看。我怎样才能做得更好呢?好吧,但是除了划船和使用eval,还有什么方法可以让演员成功吗?关于这一点:我如何从列表中获取函数而不进行求值。有没有办法不用eval就使用这个函数?
(def fns (map (fn [x] `(partial list ~x)) (range 1 3)))
((eval (first fns)) 1)
;; => (1 1)