clojure配置

1、轉換clojure工程爲eclipse工程

  1. Install Counterclockwise plugin in Eclipse (from eclipse marketplace). This brings clojure and leiningen support to eclipse.

  2. Add lein2-eclipse plugin to your project.clj :

    :plugins [[lein2-eclipse "2.0.0"]]

  3. Run following command inside the project directory :

          需要先安裝命令 brew install leiningen  

          然後執行命令    lein eclipse

This generates necessary project files.

具體是

Created .classpath
Created .project

  1. Import the project into eclipse ( File -> Import -> General -> Existing project ).

  2. 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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章