什么是“%&”在Clojure意味着什么?

时间:2015-08-23 09:48:55

标签: clojure

我使用递归解决了58th 4clojure问题,但后来我查看了另一个人解决方案,发现了这个问题:

(fn [& fs] (reduce (fn [f g] #(f (apply g %&))) fs))

哪个比我的解决方案更优雅。但我不明白%&的含义是什么? (我确实理解%的含义,但与&结合时却不明白。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:11)

根据this source,它意味着"休息参数"。

  

身体中的论据取决于论证的存在   采用%,%n或%&形式的文字。 %是%1,%n的同义词   指定第n个arg(从1开始),以及%&指定一个休息arg。

请注意,&语法让人联想到函数参数中的& more参数(see here),但&%anonymous function shorthand内工作。

一些代码来比较匿名函数和它们的匿名函数速记等价物:

;; a fixed number of arguments (three in this case)
(#(println %1 %2 %3) 1 2 3)
((fn [a b c] (println a b c)) 1 2 3)

;; the result will be :
;;=>1 2 3
;;=>nil

;; a variable number of arguments (three or more in this case) :
((fn [a b c & more] (println a b c more)) 1 2 3 4 5)
(#(println %1 %2 %3 %&) 1 2 3 4 5)

;; the result will be :
;;=>1 2 3 (4 5)
;;=>nil

请注意,& more%&语法会列出其余参数的列表。