Lisp评论约定

什么是Lisp约定,有多less分号用于不同types的评论(以及各种分号的缩进级别应该是多less)?

另外,是否有关于何时使用分号注释以及何时使用#|multiline comments|# (假设它们存在并存在于多个实现上)的约定?

在Common Lisp中:

 ;;;; At the top of source files ;;; Comments at the beginning of the line (defun test (a &optional b) ;; Commends indented along with code (do-something a) ; Comments indented at column 40, or the last (do-something-else b)) ; column + 1 space if line exceeds 38 columns 

注意:Emacs不会为#| |# #| |#很好,但是Rainer在评论中build议,尝试使用#|| ||# #|| ||#代替。

我可以说没有规则可以使用这个,但是我认为这是更快的方式来评论大量的代码,或者插入一些很长的描述,其中分号刚好以编辑的方式插入,比如巨大的BNF列表等等。

禁用以#+(or)作为expression式前缀的代码是个巧妙的技巧:

 (defun test (a &optional b) #+(or) (do-something a) (do-something-else b)) 

注意: #+nil通常也可以工作,除非碰巧有nil或者:nil特性。 #+(or)的优点在于,您可以通过注释或将其更改为#+(and)来轻松进行编辑,或者实际包含一组您希望读取expression式的function。

当你运行Lisp时,SLIME可以通过forms化(do-something a)作为注释来帮助你。

除了Common Lisp特别的注释语法和技巧,比如#| |# #| |##+(or)或更常见的#+nil ,我相信分号规则也被其他lisps广泛采用。


以下是规范的摘录,注意目前的做法在单个分号上的分歧:

2.4.4.2有关分号风格的注意事项

某些文本编辑器根据开始评论的分号数量来对期望的缩进做出假设。 下面的风格习惯是常见的,尽pipe不是通用的。

2.4.4.2.1使用单分号

以单个分号开始的注释全部alignment到右侧的同一列(有时称为“注释列”)。 这样的评论的文本通常只适用于它出现的路线。 偶尔有两三个单独一个句子; 这有时通过缩进除了第一个以外还有一个额外的空格来表示(在分号之后)。

2.4.4.2.2使用双分号

以双分号开头的注释全部alignment到相同级别的缩进,因为表单将在代码中的相同位置处。 这样的评论的文本通常描述评论发生时的节目的状态,评论之后的代码或两者。

2.4.4.2.3使用三分号

以三分号开始的注释全部与左边界alignment。 通常在定义或定义之前使用它们,而不是在定义之内。

2.4.4.2.4使用四分号

以四位分号开始的注释都与左边距alignment,并且通常只包含一小段文本,用作后面代码的标题,并可用于准备代码的程序的页眉或页脚作为硬拷贝文件呈现。

2.4.4.2.5分号的样式示例

 ;;;; Math Utilities ;;; FIB computes the the Fibonacci function in the traditional ;;; recursive way. (defun fib (n) (check-type n integer) ;; At this point we're sure we have an integer argument. ;; Now we can get down to some serious computation. (cond ((< n 0) ;; Hey, this is just supposed to be a simple example. ;; Did you really expect me to handle the general case? (error "FIB got ~D as an argument." n)) ((< n 2) n) ;fib[0]=0 and fib[1]=1 ;; The cheap cases didn't work. ;; Nothing more to do but recurse. (t (+ (fib (- n 1)) ;The traditional formula (fib (- n 2)))))) ; is fib[n-1]+fib[n-2]. 

多行注释#| |#通常用于注释掉大量的Lisp代码或示例代码。 由于一些Emacs实现似乎无法parsing它们,有些正在使用#|| ||代替。

有关分号的使用,请参阅1984年由Guy L. Steele Jr .:数字出版社出版的Common Lisp the Language (第348页)一书中的注释示例。

 ;;;; COMMENT-EXAMPLE function. ;;; This function is useless except to demonstrate comments. ;;; (Actually, this example is much too cluttered with them.) (defun comment-example (xy) ;X is anything; Y is an a-list. (cond ((listp x) x) ;If X is a list, use that. ;; X is now not a list. There are two other cases. ((symbolp x) ;; Look up a symbol in the a-list. (cdr (assoc xy))) ;Remember, (cdr nil) is nil. ;; Do this when all else fails: (t (cons x ;Add x to a default list. '((lisp t) ;LISP is okay. (fortran nil) ;FORTRAN is not. (pl/i -500) ;Note that you can put comments in (ada .001) ; "data" as well as in "programs". ;; COBOL?? (teco -1.0e9)))))) 

在这个例子中,注释可以以1到4个分号开始。

  • 单分号注释全部与右侧的同一列alignment; 通常每个评论只涉及它旁边的代码。 有时评论足够长,可以占用两三行; 在这种情况下,通常会将注释的续行缩进一个空格(分号后)。

  • 双分号注释与代码的缩进级别alignment。 一个空格通常跟在两个分号之后。 这样的评论通常描述当时程序的状态或评论后面的代码部分。

  • 三分号注释与左边距alignment。 他们通常logging整个程序或大码块。

  • 四分号注释通常指示整个程序或大码块的标题。

Common Lisp风格的标准参考(包括注释约定)是Peter Norvig和Kent Pitman的Good Lisp编程风格教程 。

而不是在这里描述它,看看这个页面 。 它是在谈论Emacs Lisp,但是所有的Lisp(和scheme)都是一样的。