是否有Lisp的"树结构编辑器"?

sca*_*let 5 lisp tree structure editor

我听说S表达式可以表示为树; 例如(f 1 (g 2) 3)

      .
 .  .  .    .
f  1   .      3          [first level]
      g  2               [second level]
Run Code Online (Sandbox Code Playgroud)

是否有编辑(最好免费)直接编辑这种结构?这个会

  1. 避免"所有这些括号"
  2. 展现我对lisp的理解.

Sva*_*nte 5

S表达式代表树,而不是相反.您的示例,使用换行符格式化:

(f 1
   (g 2)
   3)
Run Code Online (Sandbox Code Playgroud)

它代表以下cons树:

    +---+---+   +---+---+   +---+---+   +---+---+
--->| f | ----->| 1 | ----->| ¦ | ----->| 3 |NIL|
    +---+---+   +---+---+   + ¦ +---+   +---+---+
                              v
                            +---+---+   +---+---+
                            | g | ----->| 2 |NIL|
                            +---+---+   +---+---+
Run Code Online (Sandbox Code Playgroud)

这同时是程序的实际抽象语法树 - 其他语言系列的编译器必须从错综复杂的规则构建.

对于编辑,括号是您和您的编辑器在树级别上操作所需的全部内容.在Emacs中它是paredit-mode,但我猜其他编辑器也有类似的实用程序或插件.


dan*_*lei 2

据我所知(正如维基百科文章所证实的那样),Interlisp-D中使用了结构编辑。我不知道目前广泛使用的 Common Lisp 结构编辑器是什么,但也许有一些我不知道的事情。Pascal J. Bourguignon 的网站上有一个示例,您可能想尝试一下。(我没有仔细研究它)我确实这样做了,但是前段时间在Oxygen中使用了类似的 XML。

(另外,我不认为 Interlisp 使用它的原因与删除括号有任何关系,例如,注释可能存在问题。)