欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-21 09:19:58
...

这篇文章介绍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