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
对于 function 和 macro 来说,它们几乎都是用 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字节码 -
运行,执行字节码