Why? 为了更好的了解并发和函数式语言.
Clojure
是一套现代的Lisp语言的动态语言版(Lisp方言) 不变性
使它们很好的支持并发 使用 Leiningen 作为Clojure的命令行构建工具
$ brew update $ brew install leiningen # 查看lein的命令 $ lein help # 进行Clojure的REPL $ lein repl # 使用Clojure创建一个可运行的Clojure的项目 $ lein new app hello-world # 进入创建的项目, 然后执行 $ lein run # 在项目内对代码打包 $ lein uberjar # 使用java运行jar包 $ java -jar target/uberjar/hello-world-0.1.0-SNAPSHOT-standalone.jar
每学习都应该根本当前语法对应以前学习过的语法
Clojure的代码是由一个个form组成的, form的语法如下:
; operator未操作符(函数或者加减乘除等), 后面均为操作数 (operator operand1 operand2 ...operandn)
; def定义一个变量 user=> (def a1) #'user/a user=> (println a) 1
Clojure基本数据类型包括 Number, String, Map, Keyword, Vector, List, Set
, 均为 immutable
, 对基本数据类型的更改都会在生成一个新的拷贝
(def a 1) ; 整数 (def s "hello") ; 字符串 :a ; keyword (def v [123]) ; Vector数组 (conj v 4) ; 向Vector/List/Set增加数据 (list 124) ;List链表 #{1 2 3}; 使用#{}创建一个Set
(ifcondition-form then-form optional-else-form)
切记: Cloju使用nil和false表示逻辑假, 其他所有值的均为真
; 简单的函数调用 (+123)
(defn 函数名 函数注释 参数列表, 函数体)
user=> (defn hello"just a test method"[sentence] (println sentence)) #'user/hello user=> (hello"andrew liu") andrew liu
user=> (defn func-overload #_=> ([] (str"no arg")) #_=> ([name] (str"arg "name)) #_=> ([name_a name_b] (str"arg "name_a" "name_b))) #'user/func-overload user=> (func-overload) "no arg" user=> (func-overload"andrew") "arg andrew" user=> (func-overload"andrew""liu") "arg andrew liu"
user=> (def no_name (fn[name](str"hello "name))) #'user/no_name user=> (no_name "andrew") "hello andrew"
未完待续
Clojure repl Connection Closed