2012-09-15 52 views
8

在做4clojure練習時,一個目標是提供一個正確的答案,一個可選的目標是儘可能提供最短的解決方案(空格不計入),另一個代碼爲高爾夫。然後,您可以與其他解決方案進行比較。我該如何重構Clojure源代碼?

在做練習時我第一個找到一個正確的答案。然後,我將手冊重構應用於我的源代碼,其中包括將變量名稱重命名爲單個字符。例如,在應用這個基本步驟之後,我的代碼可能看起來像這樣。

(fn f[s] 
    (if (empty? s) 
    {} 
    (let [[k & r] s 
     [v n] (split-with number? r)] 
     (assoc (f n) k v)))) 

相當不可讀的人,但得分4Clojure代碼高爾夫比賽更好,因爲這樣可以節省大量的字符。

爲了好奇,你會如何在emacs中實現自動化? clojure.core中有重構函數可以幫助嗎?我沒有找到任何。

回答

6

瞭解圖書館。例如,看起來您可以使用if-letseq。如果您不考慮使用靜態分析工具「作弊」,請查看Kibit

+0

Yeh thnx if-let或seq,我知道他們。實際上,這裏提取的代碼僅用於說明目的。感謝您與Kibit的鏈接。其實我正在研究它的源代碼,並發現我不知道的新功能:走路和prewalk。從文檔中它真的聞起來像是我正在尋找的東西。謝謝 :-) –