Есть ли в Lisp «Редактор древовидной структуры»? - PullRequest
5 голосов
/ 24 октября 2011

Я слышал, что S-выражения можно представить в виде деревьев;например (f 1 (g 2) 3) как

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

Существует ли редактор (желательно бесплатный) для непосредственного редактирования такого рода структуры?Это

  1. Избегайте "всех этих скобок"
  2. Покажите элегантность, которую я понимал в Лиспе.

Ответы [ 4 ]

5 голосов
/ 27 октября 2011

S-выражения представляют дерево, а не наоборот.Ваш пример, отформатированный с помощью новых строк:

(f 1
   (g 2)
   3)

Это представляет следующее дерево доводов:

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

Это в то же время фактическое абстрактное синтаксическое дерево программы - то, что компилируетсядля других языковых семейств нужно строить из сложных правил.

Для редактирования скобки - это все, что вам и вашему редактору нужно работать на уровне дерева.В Emacs это paredit-mode , но я думаю, что другие редакторы имеют аналогичные утилиты или плагины.

2 голосов
/ 29 августа 2013

Gingko as a Tree Structure editor for lisp

Мы работаем над тем, чтобы написать Lisp с помощью Gingko (редактор общей структуры дерева).

Преобразование из дерева в источниктривиально, так что на самом деле единственное, чего не хватает, так это большей глубины (Gingko в настоящее время ограничен 3 уровнями).

[Это все еще очень экспериментально, поэтому я хотел бы получить отзывы и комментарии экспертов Lisp.]

2 голосов
/ 12 августа 2013

Режим ParEdit для emacs по сути является структурированным редактором.

Кроме того, в их статье Гомолка и Хамм упоминают исследовательский прототип, расширяющий CUSP для Eclipse, но я не знаю загружаемой реализации.

2 голосов
/ 24 октября 2011

Насколько я знаю (и, как подтверждает статья в Википедии), редактирование структуры было использовано в Interlisp-D .Я не знаю ни одного редактора структуры для Common Lisp, широко используемого сегодня, но возможно есть кое-что, о чем я не знаю.На сайте Pascal J. Bourguignon есть пример , с которым вы можете поиграть.(Я не смотрел на это поближе) Я сделал, однако, использовал нечто подобное для XML в Oxygen некоторое время назад.

(Кроме того, я не думаю, что причина Interlispиспользуется это как-то связано с избавлением от скобок, и могут быть проблемы с комментариями, например.)

...