如何重构Clojure源代码?

8

在做4clojure练习时,一个目标是提供正确的答案,另一个可选目标是尽可能提供最短的解决方案(空格不计入其中),即所谓的代码高尔夫。然后,您可以将其与其他解决方案进行比较。

在做练习时,我首先找到正确的答案。然后,我对我的源代码应用手动重构,这包括将变量名重命名为单个字符。例如,在应用此基本步骤之后,我的代码可能如下所示。

(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中的重构函数可以帮助? 我没有找到任何相关函数。

2个回答

6

学习库。例如,你可以使用if-letseq。如果您不认为使用静态分析工具是“作弊”,请查看Kibit


谢谢你提供 if-let 或 seq,我知道它们。实际上这里提取的代码只是为了举例说明。感谢你提供 Kibit 的链接。实际上我正在研究它的源代码,并发现了一些我不知道的新功能:walk 和 prewalk。从文档中看来,它确实像是我在寻找的东西。谢谢 :-) - yves Baumes

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接