`

clojure 变量定义 函数定义 宏定义

阅读更多

这篇文章介绍clojure的变量,函数,宏的定义及调用

1. 变量定义

变量定义使用def关键字,clojure中的变量是常量,一旦定义就不可改变

另外变量定义是全局可见的,比如你在函数中使用def定义变量,执行该

函数后,在函数体外是可以访问该变量的

=>(def a 10);定义变量a的值

10           

 

2. 函数定义  

函数定义有多种方式,具体可看官方文档,这里以defn为例子

(defn name doc-string? attr-map? [params*] body
(defn name doc-string? attr-map? ([params*] body) + attr-map?)

例子:

=> (defn add [a b] (+ a b))

=>(add 1 2)

3

还可以用fn, 用于定义匿名函数

=> (def add (fn [a b] (+ a b)))

=>(add 1 2)

3

还可以用 读取器宏‘#’来定义匿名函数

=>(def add #(+ %1 %2));  %1,代表第一个参数

 

3. 宏定义

宏定义使用 defmacro,宏非常强大,也是一个难点,

  • (defmacro name doc-string? attr-map? [params*] body)
  • (defmacro name doc-string? attr-map? ([params*] body) + attr-map?)

以下定义了一个执行三次表达式的宏

=>(defmacro triple-do [form]
    (list 'do form form form)
)

=>(triple-do (println "test"));  打印3次test

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics