1、轉換clojure工程爲eclipse工程
-
Install Counterclockwise plugin in Eclipse (from eclipse marketplace). This brings clojure and leiningen support to eclipse.
-
Add lein2-eclipse plugin to your project.clj :
:plugins [[lein2-eclipse "2.0.0"]]
-
Run following command inside the project directory :
需要先安裝命令 brew install leiningen
然後執行命令 lein eclipse
This generates necessary project files.
具體是
Created .classpath
Created .project
-
Import the project into eclipse ( File -> Import -> General -> Existing project ).
-
Right click on the project in eclipse then "Configure > Convert to leiningen project
2、clojure文件
http://www.liaoxuefeng.com/article/0014171500694729a42a2c8b7f245e0bd54612c88d78a03000
3 、clojure----宏語法
首先說明引號 quoting的情況,quoting分爲兩種場景,在函數內或者在 macro內,作用影響在兩個時期 宏擴展時期,編譯時期
例子,下面函數功能如果 expr爲真返回nil,否則執行語句form
3.1、問題1 quoting的作用域 問題,如果作用於單個關鍵字或者()
(defmacro unless [expr form]
( list 'if expr nil form))
by quoting (,you prevent clojure form directly evaluating ( at macro expansion time
還有注意 quote的作用範圍,上例作用於一個關鍵字if,只會影響這個關鍵字,如果作用於(,那麼會影響整個()
(defmacro unless-v2 [expr form]
'(if expr nil form z))
這個時候 ' 作用於整個() ,所以括號內你可以亂寫東西,那些不是參數的東西你都可以寫,比如上例中的z
3.2、逃脫大範圍作用域
當' 作用於括號()的時候,這個作用範圍比較大,所以這個時候有個需求,就是希望這個大範圍內的一些局部不受引號的控制,這個時候解決辦法就是 ` + ~,
~就是那些不受影響的變量
例如,原始的情況
>>(defmacro chain-v1 [fun var]
'(fun var)) ----------------------所以這個時候也是看到' quoting如果作用範圍太大也沒什麼實際效果了
希望逃脫作用域
>>(defmacro chain-v2 [fun var]
`(~fun ~var 1))
>>想看效果的話就是看宏擴展
(macroexpand '(chain-v1 inc 5))
得到的結果是
(fun var)
然後另一個執行
(macroexpand '(chain-v2 inc 5))
結果是
(inc 5)