2
(map #(words %) indexes)

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

4

3 回答 3

3

这只是一种糟糕的写作方式(map words indexes)。我不知道该函数的words作用,也不知道它的值是什么,但是这段代码在每个元素上indexes调用该函数一次,并返回一系列结果。wordsindexes

于 2013-07-22T18:17:34.157 回答
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"

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

于 2013-07-22T18:40:19.783 回答
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))
于 2013-07-22T18:41:04.883 回答