Clojure can';t在速记函数定义中使用向量创建
我想在函数中创建向量Clojure can';t在速记函数定义中使用向量创建,clojure,Clojure,我想在函数中创建向量 (map #([first %]) coll_of_tuples) 这就产生了错误 ArityException传递给的参数(0)数目错误:PersistentVector clojure.lang.AFn.throwArity(AFn.java:429) 除了使用列表,还有其他解决方法吗?我正在寻找简短的表示法。如果我需要向量类型,我会按照peter的建议使用(映射(向量(第一%))coll_of tuples)。到目前为止,list似乎是最短的表示法。如果我需要向量类
(map #([first %]) coll_of_tuples)
这就产生了错误
ArityException传递给的参数(0)数目错误:PersistentVector
clojure.lang.AFn.throwArity(AFn.java:429)
除了使用
列表
,还有其他解决方法吗?我正在寻找简短的表示法。如果我需要向量类型,我会按照peter的建议使用(映射(向量(第一%))coll_of tuples)
。到目前为止,list
似乎是最短的表示法。如果我需要向量类型,我会使用彼得建议的(映射(向量(第一%))coll\u元组)
。到目前为止,列表
似乎是最短的符号。如果您想要较短的版本,有几个选项:
(map #(-> [(first %)]) coll)
(map #(do [(first %)]) coll)
(map (juxt first) coll)
如果您想要较短的版本,有几个选项:
(map #(-> [(first %)]) coll)
(map #(do [(first %)]) coll)
(map (juxt first) coll)
您还可以为使用
,这与映射
非常相似,只是依次为序列中的每个元素指定一个符号名:
(for [tuple coll_of_tuples]
[(first tuple)])
这并不像其他一些解决方案那样简单,但在某些情况下,最好有一个命名符号,如tuple
,而不是%
,您也可以使用for
,这与map
非常相似,只是依次为序列的每个元素指定一个符号名:
(for [tuple coll_of_tuples]
[(first tuple)])
这并不像其他一些解决方案那样简单,但在某些情况下,最好有一个命名符号,如tuple
,而不是%
,我喜欢peter在
(map #(vector (first %)) coll_of_tuples)
或者交替地
(map #(-> % first vector) coll_of_tuples)
或者越来越依赖FP,越来越不依赖fn:
(map (comp vector first) coll_of_tuples)
如果您更愿意将其视为从每个序列中提取第一个1长度序列,则以下是一个更简单的答案:
(map #(take 1 %) coll_of_tuples)
我喜欢彼得在评论中的回答
(map #(vector (first %)) coll_of_tuples)
或者交替地
(map #(-> % first vector) coll_of_tuples)
或者越来越依赖FP,越来越不依赖fn:
(map (comp vector first) coll_of_tuples)
如果您更愿意将其视为从每个序列中提取第一个1长度序列,则以下是一个更简单的答案:
(map #(take 1 %) coll_of_tuples)
这行得通吗?(映射(向量(第一个%))coll\u的元组)
?是的,行得通。在这种情况下,我不需要向量。令人遗憾的是,其他的速记符号在#()
中不起作用。要使它们“起作用”,需要改变Clojure语义的可组合性,所以这是好的,而不是可悲的#()
是函数创建的简写形式。将Clojure语法组合为#([…])
意味着创建一个向量,然后封装在一个可调用的函数中。您想要的可调用函数是向量构造。该函数是向量
+彼得的回答说明了你的意思。@AlexMiller我明白为什么那不起作用了。我非常专注于从数据中提取第一个“列”,所以我认为map\u fn
是行的最终形状。这可能会重复(map#(vector(first%))coll\u of tuples)
?是的,可以。在这种情况下,我不需要向量。令人遗憾的是,其他的速记符号在#()
中不起作用。要使它们“起作用”,需要改变Clojure语义的可组合性,所以这是好的,而不是可悲的#()
是函数创建的简写形式。将Clojure语法组合为#([…])
意味着创建一个向量,然后封装在一个可调用的函数中。您想要的可调用函数是向量构造。该函数是向量
+彼得的回答说明了你的意思。@AlexMiller我明白为什么那不起作用了。我非常专注于从数据中提取第一个“列”,因此我认为map\u fn
是行的最终形状。另一个行的可能副本可以是(map(comp vector first)…
,而这些都很简洁(我特别喜欢juxt),我发现它们更难一目了然。第一个和第二个版本正是我试图做的事情的简洁版本,并且满足了map\u fn
@AlexMiller我认为juxt
更令人困惑,因为只考虑了一个值,即没有并置。另一个可能是(map>)(comp vector first)…)
虽然这些都很简洁(我特别喜欢juxt),我发现它们更难一目了然。第一个和第二个版本正是我试图做的事情的简洁版本,并且满足了map\u fn
@AlexMiller的要求。我认为juxt
更令人困惑,因为只考虑了一个值,即没有并列。