Clojure使用map存储结果和参数
我试图获取一些输入,对其进行计算,然后找到最小值,并获得创建该最小值的参数Clojure使用map存储结果和参数,clojure,Clojure,我试图获取一些输入,对其进行计算,然后找到最小值,并获得创建该最小值的参数 alist = [1 2 3 4 5 -4] ; I want [[1 -1] [2 -2] [3 -3]] ; the following doesn't work. how can i make it work? (map #( [% (* -1 %)]) [ 1 2 3]) 它也可以是hashmap,用于存储结果。 这应该是荒谬的琐碎,但我不能让它工作。另外,我的列表是一个懒惰的seq,所以我不能用原始列
alist = [1 2 3 4 5 -4]
; I want [[1 -1] [2 -2] [3 -3]]
; the following doesn't work. how can i make it work?
(map #( [% (* -1 %)]) [ 1 2 3])
它也可以是hashmap,用于存储结果。这应该是荒谬的琐碎,但我不能让它工作。另外,我的列表是一个懒惰的seq,所以我不能用原始列表压缩结果
; this doesn't work cause alist is a lazy-seq in my program
(let [results (map #(* -1 %) alist)]
(map vector alist results)
)
有很多方法可以做到这一点:
(map (juxt identity #(* -1 %)) [1 2 3])
(for [i [1 2 3]] [i (* i -1)])
(let [s [1 2 3] result (map #(* -1 %) s)] (map vector s result))
(map (fn [i] [i (* i -1)]) [1 2 3])
尽管您声称相反,但使用let绑定和两个map调用的版本在惰性seq上运行良好。不过,这是这些例子中最不清楚的方法
要显示匿名函数错误的原因,请执行以下操作:
user> '#( [% (* -1 %)])
(fn* [p1__17065#] ([p1__17065# (* -1 p1__17065#)]))
读取器将
#([%(*-1%)])
扩展到两元素向量上的函数调用,该函数调用不提供任何参数。这当然是一个错误(当用作函数时,向量应该包含1个或2个参数,而且这不是您想要对向量执行的操作)。我不清楚您的问题,但您可能想了解一下min-key如何获得[[1-1][2-2][3-3]
?使用(映射向量列表结果)在一个懒惰的seq上。它只是说了一些错误懒惰的seq,所以我认为这是这一行的原因(当我添加它时,程序坏了)。不过谢谢!希望从python到clojure是ew。我注意到的另一个小技巧,可能不足以编辑这个答案,但是#(*%-1)
在一个arg(-4)
=>-4上被调用时相当于-