Time of Update: 2018-12-04
宏for可以支援迴圈下面繼續前面的xml的例子,示範如何用for遍曆xml-seq返回的sequence.user=> (for [x r] (println "^" x))(^ {:tag :service, :attrs nil, :content [{:tag :mongodb, :attrs nil, :content [{:tag :uri, :attrs nil, :content [localhost]}]} {:tag :socket, :attrs nil,
Time of Update: 2018-12-04
從今天開始,Silverlight 1.1 正式更名為Silverlight 2.0。更名的原因主要源於原Silverlight 1.1將要經曆的巨大變化——今天9月份,Silverlight
Time of Update: 2018-12-04
寫一個真正的互連網應用,才可以觀察Clojure的威力。本文使用Noir架構,參考官方網站:http://www.webnoir.org/執行三行命令:lein new noir my-websitecd my-websitelein run也可以在lein run命令前運行lein deps命令。國內網路下載依賴比較痛苦,還好用了proxy,試了好多次,web應用的所有java依賴才下載完成,程式啟動成功:~/my-website$ lein depsRetrieving
Time of Update: 2018-12-04
參考官方文檔:http://clojure.org/data_structures很多自訂的map擁有部分或者全部相同的keys,將這些相同的keys抽出來定義成StructMap類型,可以提升效能,節省記憶體。下面這篇中文文檔寫的非常好,推薦,我的例子來自於它:http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/#struct-maps英文原版是最新的,參考:
Time of Update: 2018-12-04
前面一節介紹了Noir如何非常方便的建立一個web app,但是我的實際一個項目的需求中只需要REST API開發,頁面部分都交給了html和Javascript,並不需要Noir在後台渲染網頁。同樣無需重新啟動程式,在src目錄下建立rest目錄,裡面有一個test.clj檔案:$ tree.├── models├── rest│ └── test.clj├── server.clj└── views ├── common.clj └──
Time of Update: 2018-12-04
Clojure提供了一種函數和宏之外的操作形式,special form. 數量有限,並且不是Clojure語言本身實現的。主要是下面幾個:catch,def, do, dot ('.'), finally, fn, if, let, loop, monitor-enter, monitor-exit, new, quote, recur, set!, throw, try 和 var.完整文檔請參考:http://clojure.org/special_formsVars這裡要解釋一下。首先,
Time of Update: 2018-12-04
近些年來,中國的軟體技術隊伍一直在快速擴大中,而國內的技術交流論壇較之歐美一直較為匱乏,大型的技術會議與活動更是屈指可數。但隨著中國軟體技術的蓬勃發展,已經有越來越多的軟體技術工作者被邀請到更多的技術活動中來。今年2月20日、21日,中國首屆.NET技術大會將於上海召開。這對中國廣大使用.NET技術的開發人員以及.NET技術愛好者來說無疑是一個好訊息。 該大會由SoftCompass(祝成科技)與微軟共同主辦,邀請了海內外.NET領域的著名技術專家、企業界人士、以及社群精英相聚一堂,與與會者共同
Time of Update: 2018-12-04
(fn..)可以用來建立匿名函數,比如:user=> (fn [x] (+ 2 x))#<user$eval328$fn__329 user$eval328$fn__329@f41393>接受一個參數x,然後加上2. 上面的調用使用fn定義了一個函數,但是並沒有執行。如果要立即執行,可以加上括弧和參數:user=> ((fn [x] (+ 2 x)) 5)7但是更多時候我們希望函數先定義,以後反覆使用,可以結合def:user=> (def f (fn [x] (+
Time of Update: 2018-12-04
sequence定義sequence不是一般的list,實際上實現了ISeq介面,ISeq介面定義如下:package clojure.lang;/** * A persistent, functional, sequence interface * <p/> * ISeqs are immutable values, i.e. neither first(), nor rest() changes * or invalidates the ISeq */public
Time of Update: 2018-12-04
最近看到一批面試題目,比較感興趣,工作之餘解解題來練習練習思維.人人筆試1:一個人上台階可以一次上1個,2個,或者3個,問這個人上n層的台階,總共有幾種走法?思路:先建立數學模型,設3步的走 i 次,2步的走 j 次, 1步的走 k 次,上了3*i + 2*j + 1*k = n個台階.總共走 i + j + k 次, 等於把n個台階的長度先劃分成 i + j + k 個段落, 然後分別填下i個3, j 個2, k個1.這樣,當劃分成 i + j + k 個段落時,
Time of Update: 2018-12-04
最近在閱讀SGI STL原始碼,其中紅/黑樹狀結構的實現比較有技術含量,但標準庫裡面是捆綁了其中的allocator, iterator(Rb_tree專用的),使用很多模板變數,實現對多種資料類型的處理。這些情況對於有較紮實C++基礎的人來說不成問題,但對於一般初學演算法,而又沒有太好的C++基礎的人來說有點困難。並且SGI STL中的實現代碼寫得很精巧,節省代碼,也高效運行,但會使得功能不夠深厚的人讀起來還是比較費勁。
Time of Update: 2018-12-04
剛才從論壇上面看到一個文章,我之前也碰到過這一類問題,所以記下來,算學習到新的東西。從回答者給出的不同的代碼,也從另一個側面看到了這個問題的多種思維解決方案。還是有不少東西可以學得到的。 學習到的內容:stuff函數的應用問題: 有一個使用者表(姓名,編號,愛好) user(name,id,hobby),裡面的資料有: 張三 001 籃球 張三 001 電影 李四 002 足球 王五 003 上網 李四 002 看美女現在要求寫一SQL語句,使查出結果為:
Time of Update: 2018-12-04
光勇哥那天聽說我要介紹《高效能人士的七個習慣》, 和我說: 這個的確有點難度. 我也感覺到, 對於社會經驗還不太豐富的我來說, 的確是一個不少的挑戰, 但我必須把這個挑戰看作一個機會, 一個與有經驗的高手交流的機會, 如果我不說出來, 誰知道我這麼想過, 如果你們沒聽過, 怎麼知道也許有人和你的想法是一樣的, 或者你已經完全掌握了這些高效的習慣, 可以給我們介紹更好的經驗. 爭取能通過這個主題目, 達到雙贏的目的. 說實話, 講這個主題目是有不少壓力的. 我也考慮過,
Time of Update: 2018-12-04
WinForm DataGrid 的DataGridTableStyle用法Part 1 自訂資料來源方式的代碼,首先在winform裡拖一個DataGrid進去。 privatevoid Form1_Load(object sender, System.EventArgs e) { //定義資料來源--DataTable DataTable dt=new DataTable("mytable"); //添加列
Time of Update: 2018-12-04
把事情分兩個維度判斷: 重要與不重要, 緊急與不緊急. 這樣可以把日常事情分為四個種類: 重要且緊急, 重要不緊急, 不重要且緊急, 不重要不緊急. 當我第一次看到這個主題目的時候, 沒有去深入瞭解其中的理論, 便自認為, 生活中都應該重點把握重要而緊急的事情! 然而, 深入讀了本書的理論, 再經過實踐, 重要而緊急的事情做好了固然是需要的, 但重要而不緊急的事情處理好了, 那麼, 重要而緊急的事情將會變得處理起來簡單有效! 這才是高效辦事的一個理想的解決方案.
Time of Update: 2018-12-04
前面的REST API還要繼續改進,因為Ajax調用通常都需要JSON格式的響應,所以修改test.clj檔案如下:(ns my-website.rest.test (:require [noir.response :as response]) (:use [noir.core :only [defpage]]))(defpage "/rest/:id" {:keys [id]} (response/json {:userId id})):require 引入了noir.response,
Time of Update: 2018-12-04
map函數比較特別,首先看一個簡單的功能:user=> (def f (fn [x] (+ 2 x)))#'user/fuser=> (map f [2 4 7])(4 6 9)先定義了一個f函數,接受一個參數,然後返回+2後的結果。map接受兩個參數,第一個是f函數,第二個是一個數組。用數組中的三個元素依次調用f函數,每次調用的結果加入到一個list中並返回。map的文檔:-------------------------clojure.core/map([f coll] [f
Time of Update: 2018-12-04
最好的設定檔寫法是採用clj檔案,下面先把前面的a.xml檔案改成a.clj檔案,內容如下:{:mongodb "localhost" :listen_port 7777 :login_timeout 200 :check_timeout 200}這裡定義了一個map。注意,localhost是字串,必須用雙引號。這裡用空格分開每個key/value組成的pair.在test.clj檔案中添加一行代碼:(ns my-website.rest.test (:require
Time of Update: 2018-12-04
一個完整的web app當然需要寫日誌。這裡我採用習慣的slf4j+logback。首先在my-website目錄的project.clj檔案中添加兩個依賴:tools.logging&logback-classic(defproject my-website "0.1.0-SNAPSHOT" :description "FIXME: write this!" :dependencies [[org.clojure/clojure "1.4.0
Time of Update: 2018-12-04
由於logback暫時不能用,所以這裡先用log4j頂一下。project.clj檔案如下:(defproject my-website "0.1.0" :description "example rest service" :dependencies [[org.clojure/clojure "1.4.0"] [com.novemberain/monger "1.4.1"]