当前位置:  开发笔记 > 编程语言 > 正文

Lisp代码格式

如何解决《Lisp代码格式》经验,为你挑选了2个好方法。

其中一个花时间评论我关于Clojure/LISP语法的另一个问题的人指出我没有用标准的LISP方式编写我的示例代码.所以他很友好地重写了代码片段,这是一个很大的帮助.但它在我的脑海里提出了另一个问题.为什么这样:

(if (= a something)
  (if (= b otherthing)
    (foo)))

这是标准的LISP格式,可以使用这种形式:

(if (= a something)
  (if (= b otherthing)
    (foo)
  )
)

这是因为我的C++开发背景,我会天真地格式化这段代码的方式.我想知道后一种格式化是否有任何好处,或者它只是一种根深蒂固的标准(如QWERTY键盘).我不是要争论 - 我很难理解为什么第一种形式会更好.第二种形式帮助我更容易地看到代码结构.



1> Christian Be..:

额外行上的右括号对查看代码结构没有帮助,因为您可以从缩进级别获取相同的信息.但是,第二种形式占用了几乎两倍的行,迫使您在阅读代码时更频繁地滚动.

如果您需要更仔细地检查嵌套括号,则突出显示匹配括号的编辑器将对您有所帮助.当匹配的括号不太远时,这也会更容易.

如果表达式太长且太复杂而无法轻松阅读,那么也可能表明您应该将部分功能提取到单独的函数中.



2> Kyle Cronin..:

Lisp代码缩进的方式有点像Python中的重要空白,除了它当然是可选的.基本的经验法则是,如果项目不在同一条线上,则将项目垂直放置在另一个列表中.

(a (b (c (d e)
         (f g))
      (h i j))
   (k l m n))

甚至没有查看括号,您可以看到,(d e)并且(f g)是参数c,(c (d e) (f g))并且(h i j)是参数b,(b (c (d e) (f g)) (h i j))并且(k l m n)是参数a.

在您的示例中,它应该更正确地格式化如下:

(if (= a something)
    (if (= b otherthing)
        (foo)))

    ^   ^
  notice how they line up

现在缩进的级别变得有意义了,你不再需要依赖平衡括号来获取那些信息,并且因为将它们放在与结束语句相同的行上更紧凑,这就是lispers所做的.当然,并不要求Lisp代码以这种方式格式化,但它是人们使用并且可以依赖的相当标准的约定.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有