2012-09-15 53 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。从文档中它真的闻起来像是我正在寻找的东西。谢谢 :-) –