Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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代码的作用是什么?_Clojure_Functional Programming_Anonymous Function - Fatal编程技术网

这一行Clojure代码的作用是什么?

这一行Clojure代码的作用是什么?,clojure,functional-programming,anonymous-function,Clojure,Functional Programming,Anonymous Function,单词是字符串向量,索引是非负整数序列。我知道#(…)是一个匿名函数,%表示它的参数。我认为这样做的目的是在指定的索引处获取单词,但是有人可以将匿名函数重写为更容易理解的函数吗?这只是编写(映射单词索引)的一种不好的方法。我不知道函数words做什么,也不知道索引的值是什么,但此代码对索引的每个元素调用函数words一次,并返回一系列结果。如果我理解正确,您有: (map #(words %) indexes) clojure的优点之一是,标准数据结构也是其成员的函数。这意味着以下各项是等效的:

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

这只是编写
(映射单词索引)
的一种不好的方法。我不知道函数
words
做什么,也不知道
索引的值是什么,但此代码对
索引的每个元素调用函数
words
一次,并返回一系列结果。

如果我理解正确,您有:

(map #(words %) indexes)
clojure的优点之一是,标准数据结构也是其成员的函数。这意味着以下各项是等效的:

(def words ["who" "what" "where" "when"])
(def indexes (range 4))
(map #(words %) indexes)
    => ("who" "what" "where" "when")
这也适用于贴图和集合。前者接受一个键并返回值。后者在列表中查找参数,如果找到或为nil,则返回该参数

(get words 1)
  => "what"
(words 1)
   =>"what"
相当于

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

(ifn? words) ;=> true

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

相当于(一个惰性序列)


不过单词不是函数,它是字符串向量。@user1136342关键字
vector
,它不是函数,但实现了
Ifn
接口。如果你在最初的帖子中使用了这一点,并给出了一个例子,我们就不用猜了!但是,这个答案仍然是正确的。不需要匿名函数,只需要
(映射词索引)
,因为
Ifn
作为
get
vector
s.@A.Webb,我质疑“不是函数”:它绝对是一个函数,因为它实现了
Ifn
。这只是一个用
[]
定义的函数,而不是
(fn…
@amalloy是的,这太草率了——不是
fn?
函数。谢谢你的评论!对于向量
v
(vx)
并不严格等同于
(get vx)
。具体来说,如果
x
不是整数,或者在
v
的索引范围之外,
(vx)
将抛出异常,而
(get vx)
将返回nil。
(get words 0) ;=> "apple"
(get words 1) ;=> "banana"
(map #(words %) [0 1])
((get words 0) (get words 1))