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
字节码 -
运行,执行字节码