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使用map存储结果和参数_Clojure - Fatal编程技术网

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上被调用时相当于
-