%-mark在Clojure中意味着什么?

时间:2014-08-21 13:19:28

标签: clojure

我试图找到答案,但只搜索%-mark非常困难。所以我有时会看到%-mark,但我无法理解它的功能是什么。如果有人能说清楚,那将是非常好的。

3 个答案:

答案 0 :(得分:4)

我假设这是在匿名函数中,如#(first %),如果是这样,它意味着第一个参数。如果还有更多,则可以为他们编号%1%2等。

例如

(filter #(odd? %) [1 2 3 4 5 6]) => (1 3 5)

注意:在此示例中,您通常只需执行(filter odd? [1 2 3 4 5 6])

答案 1 :(得分:3)

#(blah %)是匿名函数参数的简写。因此,如果您正在对列表中的每个元素进行平方,而不是

(map (fn [x] (* x x)) [1 2 3])

你可以写

(map #(* % %) [1 2 3])

即。将#(* % %)替换为(fn [x] (* x x))作为匿名函数。每个人都会给(1 4 9)

答案 2 :(得分:1)

%只是#(...)阅读器宏中的参数的占位符,它会重写为(fn * ...)调用。这意味着第一个传递的参数。

你可以在%之后添加一个数字来表示参数的索引号,注意第一个参数索引是1,所以%==%1。

您应该为返回的函数提供尽可能多的参数作为您在函数定义中使用的最高索引。

#(str %4 %2)

给出

(fn* [p1__680# p2__679# p3__681# p4__678#] (str p4__678# p2__679#))

并需要4个参数。

观察%4和%2是先按照阅读顺序进行管理,然后在填充空白的宏之后创建未使用的参数。