我听说S表达式可以表示为树;例如(f 1 (g 2) 3)
为
.
. . . .
f 1 . 3 [first level]
g 2 [second level]
是否有编辑(最好免费)直接编辑这种结构?这会
答案 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)
我们正在努力让你write Lisp with Gingko(一般的树形结构编辑器)。
从树到源的转换是微不足道的,所以唯一缺少的就是更深入(银杏目前仅限于3个级别)。
[这仍然是非常实验性的,所以我喜欢反馈&来自Lisp专家的意见。]