函数
定义函数
(defn 函数名 [参数] (函数体))
调用函数
(函数名 参数)
例如
user=> (defn greet name )
#'user/greet
user=> (greet "Tom")
"Hello, Tom"
函数重载
clojure的函数可以根据函数的参数个数不同定义不同函数体
user=> (defn greet
#=> ([] (greet "bro"))
#=> (name))
#'user/greet
user=> (greet) ;无参数调用
"Hello, bro"
user=> (greet "Tom") ;一个参数调用
"Hello, Tom"
变参函数
当不确定参数个数的时候,可以用&
在可变参数前面修饰
user=> (defn hello [greeting & who]
#_=> (println greeting who))
#'user/hello
user=> (hello "Hello" "world" "class")
Hello (world class)
匿名函数
只要把defn替换成fn,去掉函数名就变成了匿名函数
(fn param )
使用
user=> ((fn param) "Hello world!")
Hello world!
匿名函数还有一个种简写形式
函数体用#()
表示
参数的表示形式为
* 单参数时用%
表示
* 多参数用%1, %2, %3…
表示
* 变参用%&
表示
user=> (#(println %) "Hello world!") ;等价于 ((fn param) "Hello world!")
Hello world!
用apply调用函数
语法为
(apply 函数名 参数 sequence)
注意apply函数的最后一个参数必须是sequence
(apply func "hi" '("Tom" "!!!")) ;等价于(func "hi" "Tom" "!!!")