管理clojure中的括号数量

Jim*_*ies 8 lisp readability clojure code-readability

我是clojure的新手,我正在努力解决的主要问题是编写可读代码.我经常最终得到如下所示的功能.

(fn rep 
  ([lst n]
    (rep (rest lst)
    n
    (take n 
      (repeat (first lst)))))
  ([lst n out]
    (if
      (empty? lst)
      out
      (rep 
        (rest lst) n
        (concat out (take n 
          (repeat 
            (first lst))))))))
Run Code Online (Sandbox Code Playgroud)

有很多端括号的构建.有哪些方法可以减少这种情况或将其格式化,以便更容易找到丢失的括号?

Joo*_*aat 15

使用Emacs的paredit模式(在其他几个编辑器中也模仿)意味着你通常 - 除非你使用鼠标/强制非结构化选择进行复制/粘贴 - 处理匹配的括号/大括号/括号和相关的缩进而不需要计数.

Emacs与https://github.com/technomancy/emacs-starter-kit(强烈推荐!)默认情况下为clojure启用了paredit.否则,请参阅 http://emacswiki.org/emacs/ParEdit


Raf*_*ird 13

除了拥有支持大括号匹配的编辑器之外,您还可以尝试使代码更少嵌套.我相信你的功能可以改写为:

(defn rep [coll n] (mapcat (partial repeat n) coll))
Run Code Online (Sandbox Code Playgroud)

当然,这更多的是艺术(工艺)而不是科学,但有些指针(按随机顺序):

  • 关于4clojure的问题及其顶级用户的解决方案(在解决特定问题后可见) - 我相信Chris Houser在那里处理chouser
  • 说到CH - "Clojure的喜悦"是一本非常有用的读物
  • 浏览clojure.core上的文档 - 那里有很多有用的功能
  • ->->>线程宏对于展平嵌套代码非常有用
  • stackoverflow - 世界上一些最聪明,最有帮助的人在那里回答问题;-)


Jef*_*eff 7

在这种情况下,为括号着色的编辑器非常有用.例如,这是你的代码在我的vim编辑器中看到的内容(使用vimclojure):

彩虹的颜色

由于您没有说明您使用的编辑器,因此您必须适当地为编辑器找到彩虹着色功能.