我还在学习clojure,我有一个疑问
当我写一个匿名函数时,我这样做
fn [parameter]
(do something)
Run Code Online (Sandbox Code Playgroud)
好的..函数体由一组括号括起来
现在我正在阅读像这样的斐波那契解决方案
(iterate (fn [[a b]] [b (+ a b)]) [0 1]))
Run Code Online (Sandbox Code Playgroud)
我的怀疑是为什么它不是这样的
(iterate (fn [[a b]] ( [b (+ a b)] )) [0 1]))
Run Code Online (Sandbox Code Playgroud)
我附上了这个函数 ()
(iterate (fn [[a b]] "(" [b (+ a b)] ")" ) [0 1]))
Run Code Online (Sandbox Code Playgroud)
它接收一个向量然后返回正文函数比其他向量...
当我使用像参数这样的向量调用函数或者我犯了一个大错误时,它会有所不同.
如果函数返回一个向量,则不需要用任何东西包装它,只需在其括号中返回向量即可.函数的主体不一定"包裹"在括号中,它只是非常常见,因为通常函数在返回值之前会做几件事,这涉及到使用括号.
因此,如果您只是从函数返回一个向量,则函数的"主体"可以是[foo,bar,baz].如果你要返回一张地图,那么该函数的主体可以是{:a foo, :b bar, :c baz}.如果您返回单个值,则可以是单个符号.
"包装"括号中的唯一的事情是整个函数定义本身,无论是它的(fn [] ...),#(...)或(defn [] ...).
另一注:括号和大括号[,],{和}实际上的只是语法糖(vector)的功能和(hash-map)各自的功能,所以[1,2,3]是一样的(vector 1 2 3),并{:a foo, :b bar}是一样的(hash-map :a foo :b bar).如果它可以帮助您在括号中看到"包裹"函数体,则可以使用较长的函数名称来返回Clojure的向量和映射数据类型,但使用括号和括号更加惯用.