● Java运行时。
● Leiningen。Leiningen是一个用于管理依赖项的工具,并且可以基于代码启动各种任务。
使用Leiningen来安装Clojure
使用Leiningen获取它们的依赖项:
依赖项将被下载到本地并放置在适当的位置。
使用REPL首先,在REPL提示符下键入(println "hello world")。
● defn定义了一个函数。
● hello是这个函数的名称。
● hello函数接受一个参数name。
● str是一个函数调用,把由任意参数组成的列表连接为一个字符串。
● defn、hello、name和str都是符号(symbols),代表了它们各自涉及事物的名称。
前缀#'表示这个函数是用一个 Clojure变量(var)来保存的,其中 user 是这个函数所在的命名空间(namespace)(就像 Java的默认包一样,user是REPL的默认命名空间)。
特殊变量使用 REPL 时,最近三次求值结果的描述被分别存储在特殊变量*1、*2和*3中。这使得进行迭代变的非常容易。
使用pst函数(print stacktrace)得到堆栈跟踪信息。
添加共享状态纯函数易于开发、测试,并易于理解,应该优先选择它们来处理任务。
可是,大多数程序拥有共享状态,并且需要使用非纯粹的函数来管理这些共享状态。
#{}是空集合的字面表示法。
conj是conjoin(连接)的缩写,它会新建一个含有新增项的集合。将元素连接到集合,就好像是创建了一个新的集合。
使用def来为原子命名。
def有点像defn,但更为通用。Def既能定义函数,又能定义数据。
要更新一个引用,需要使用诸如swap!这样的函数。
swap!会对拿引用r去调用update-fn,并根据需要传递其他可选的参数。
原子只是Clojure的几种引用类型之一。选择恰当的引用类型时,需要格外小心仔细。
可以在任何时候使用deref或者它的缩写@号来提取引用内部的值。
只要可能,就应该极力避免状态。
原子(和所有其他的Clojure引用类型)对于多个线程和多个处理器都是安全的。
获得这种安全性无需借助声名狼藉的锁定机制。