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

时间:2011-10-23 20:35:06

标签: tree editor lisp structure

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

      .
 .  .  .    .
f  1   .      3          [first level]
      g  2               [second level]

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

  1. 避免“所有这些括号”
  2. 展示我对lisp的理解。

4 个答案:

答案 0 :(得分:5)

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

(f 1
   (g 2)
   3)

它代表以下的cons树:

    +---+---+   +---+---+   +---+---+   +---+---+
--->| f | ----->| 1 | ----->| ¦ | ----->| 3 |NIL|
    +---+---+   +---+---+   + ¦ +---+   +---+---+
                              v
                            +---+---+   +---+---+
                            | g | ----->| 2 |NIL|
                            +---+---+   +---+---+

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

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

答案 1 :(得分:2)

据我所知(以及维基百科文章确认),structure editing中使用了Interlisp-D。我不知道今天广泛使用的Common Lisp的任何结构编辑器,但也许有一些我不知道的东西。在Pascal J. Bourguignon的网站上有一个example你可能想要玩。 (我没有仔细看看它)我做了,但不久前在Oxygen使用类似的XML。

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

答案 2 :(得分:2)

emacs的ParEdit模式本质上是一个结构化编辑器。

此外,在their paper,Gomolka& Humm提到了为Eclipse扩展CUSP的研究原型,但我不知道可下载的实现。

答案 3 :(得分:2)

Gingko as a Tree Structure editor for lisp

我们正在努力让你write Lisp with Gingko(一般的树形结构编辑器)。

从树到源的转换是微不足道的,所以唯一缺少的就是更深入(银杏目前仅限于3个级别)。

[这仍然是非常实验性的,所以我喜欢反馈&来自Lisp专家的意见。]