lisp S-exp中间的字符串?

Strings in the middle of lisp S-exp?

我用 Google 搜索了一些东西,例如 "lisp documentation strings"、"lisp comments" 和其他一些东西,但我找不到任何专门解决这个问题的东西。

我看到很多代码(尤其是在 CL 和 elisp 中)看起来像

(defvar test 1
  "This is a quoted string and it says things"
)

我通常会做的地方

; This is a comment
(defvar test 1)

哪个更受欢迎?每个都有不同的目的吗?谢谢!

您没有尝试查看 defvar 的超规格吗?

defvar 有一个可选参数——文档字符串,这就是你在说什么。

可以通过 documentation:

访问以这种方式指定的文档
CL-USER> (defvar *a* "A variable" "A docstring")
*A*
CL-USER> (documentation '*a* 'variable)
"A docstring"

Common Lisp 中的许多对象可以有一个文档字符串,可以使用通用函数 documentation and set with the generic function (setf documentation). According to the specification:

检索

Documentation strings are made available for debugging purposes. Conforming programs are permitted to use documentation strings when they are present, but should not depend for their correct behavior on the presence of those documentation strings. An implementation is permitted to discard documentation strings at any time for implementation-defined reasons.

因此第一种情况允许定义一个变量及其文档字符串,如果实现允许,可用于在 运行 时存储对文档和调试有用的信息,要么通过 IDE 使用,要么直接通过如下形式使用:

(documentation 'test 'variable)

第二种情况只是源文件中的注释,仅供人类使用,系统 reader/compiler 完全忽略它。

开发环境将使用这些文档功能。例如 GNU Emacs / SLIME:

将文本光标移动到符号 test 上。

键入 c-c c-d c-d(描述符号)。

现在 SLIME 显示一个包含以下内容的缓冲区:

COMMON-LISP-USER::TEST
  [symbol]

TEST names a special variable:
  Value: 1
  Documentation:
    This is a quoted string and it says things

源代码中的简单注释不会启用这种形式的开发环境集成和文档查找。

我看到你的标签也包含 scheme 和 elisp。在 CL 和 Elisp 中总是使用文档字符串。文档系统以其语言使用它们。 Scheme 没有该功能,因此您将不得不继续使用注释来记录函数。