这一行Clojure代码有什么作用?

时间:2013-07-22 18:01:56

标签: clojure functional-programming anonymous-function

(map #(words %) indexes)

单词是字符串的向量,索引是一系列非负整数。我知道#(...)是一个匿名函数,%表示它的参数。我认为这个想法是在指定的索引处获取单词,但有人可以将匿名函数重写为一个更容易理解的函数吗?

3 个答案:

答案 0 :(得分:3)

这只是写(map words indexes)的一种坏方法。我不知道函数words做了什么,或者indexes的值是什么,但是这段代码在words的每个元素上调用函数indexes并返回一系列结果。

答案 1 :(得分:3)

如果我理解正确,你有:

(def words ["who" "what" "where" "when"])
(def indexes (range 4))
(map #(words %) indexes)
    => ("who" "what" "where" "when")

关于clojure的一个好处是标准数据结构也是其成员的功能。这意味着以下内容是等效的:

(get words 1)
  => "what"
(words 1)
   =>"what"

这也适用于地图和集合。前者取一个键并返回值。后者在列表中查找参数,如果找到则返回nil。

答案 2 :(得分:2)

(def words ["apple" "banana" "cantaloupe" "date" "fig"])

(ifn? words) ;=> true

(words 0) ;=> "apple"
(words 1) ;=> "banana"

相当于

(get words 0) ;=> "apple"
(get words 1) ;=> "banana"

所以

(map #(words %) [0 1])

等同于

的(懒惰序列)
((get words 0) (get words 1))