Clojure 是一种 Lisp 方言,属于函数式语言的范畴(主流的函数式语言有 Clojure , Common Lisp , Erlang , F# , Haskell , ML , OCaml , Scheme , Scala),这个系列的博客主要介绍 Clojure 的基础知识。

Lisp 被普遍认为是一种玩具语言的时候,Clojure 借助 Java Virtual Machine (JVM) 走上了不同的道路,成为一种动态类型的、可以与 Java 相互操作的语言。

关于 Clojure 与传统 Lisp 的差异,可以参阅 这里,如果你不喜欢 s-expressions,那么你应该考虑是否继续阅读这篇博客,因为这正是 Lisp 及其方言的主要特色之一。


public void hello(String name) {
    System.out.println("Hello, " + name);
}


(defn hello [name]
  (println "Hello," name))

此外,Clojure 还是一门开源语言,使用 EPL(Eclipse Public License) 发布。

Clojure 中,每一个操作都属于下列三种形式之一:

  • function

  • macro

  • special form

对于 functionmacro 来说,它们几乎都是用 Clojure 来实现的; 而 special form 并不是,它包括:

  • catch

  • def

  • do

  • dot(.)

  • finally

  • fn

  • if

  • let

  • loop

  • monitor-enter

  • monitor-exit

  • new

  • quote

  • recur

  • set!

  • throw

  • try

  • var

Haskell 类似,Clojure 中也大量应用延迟计算。懒惰序列 是一种集合,使得创建无限集合非常高效。

Clojure 代码的处理分为三个阶段:

  • 读入,读取 Clojure 源代码并且把代码转变成数据结构

  • 编译,数据结构被转化成 Java 字节码

  • 运行,执行字节码