2011-10-23 12 views
5

Słyszałem, że wyrażeń S można przedstawić jako drzewa; na przykład (f 1 (g 2) 3) jakoCzy istnieje "Edytor struktury drzewa" dla Lispa?

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

Czy istnieje edytor (najlepiej za darmo) do edycji tego rodzaju struktury bezpośrednio? To byłoby

  1. Unikać „wszystkie te nawiasy”
  2. wykazują elegancja Byłem zrozumienie Lisp.

Odpowiedz

2

O ile mi wiadomo (i zgodnie z artykułem z Wikipedii), structure editing zostało użyte w Interlisp-D. Nie jestem świadomy powszechnie używanego edytora struktury Common Lisp, ale być może jest coś, o czym nie wiem. Na stronie Pascala J. Bourguignona znajduje się numer example, z którym możesz się pobawić. (Nie przyjrzałem się temu bliżej) zrobiłem, jednak jakiś czas temu użyłem czegoś podobnego do XML w Oxygen.

(Również nie sądzę powód interlisp używany miało to nic wspólnego z pozbycie nawiasach, a tam mogą być problemy z uwagi, na przykład.)

+0

Chyba programu Pascala może być przydatna, jeśli mogę dowiedzieć się, jak włączyć go do Emacsa. Nie jest to jednak edytor drzewa, którego szukałem, więc myślę, że powinienem pozostawić pytanie na razie otwarte. Przyznaję, że tak naprawdę nie rozumiem Interlisp nawet po przeszukaniu go; czy to był system operacyjny dla Lisp Machines?(Niestety, to prawdopodobnie by nie pomogło bardzo! :) – scarlet

+0

Tak, Interlisp działał na Lisp Machines i był jednym z systemów używanych przed Common Lisp. Jednak Common Lisp był silniej uzależniony od Maclispa, a użycie edytorów struktury nie przysnęło. Nawet jeśli to nie "bardzo pomaga", dobrze jest wiedzieć, że edycja konstrukcji nie jest nowym pomysłem, ale była już używana kilka dekad temu. (Pamiętam o tym na cll, więc możesz chcieć wyszukać ten temat w grupach google.) – danlei

+0

Jeśli naprawdę chcesz napisać tryb Emacsa na coś takiego, może mógłbyś także rozważyć tryb, który po prostu zmienia sposób kod jest reprezentowany i edytowany, zamiast zmieniać bezpośrednio sekst, jak robi to kod Pascala. (Takie jest podejście narzędzi XML, takich jak Oxgen). Wtedy możesz uniknąć ewentualnych problemów z komentarzami w kodzie i łatwiej będzie wymienić kod z innymi, którzy nie używają edycji struktury. – danlei

5

S-wyrażenia oznaczają drzewa , nie na odwrót. Twój przykład, sformatowany z nowymi liniami:

(f 1 
    (g 2) 
    3) 

Reprezentuje następujące minusy drzewa:

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

Jest to jednocześnie rzeczywista drzewo składni streszczenie programu — coś, kompilatory dla innych rodzin językowych muszą budować z zawiłych reguł.

Do edycji, nawiasy są wszystkim, a twój edytor musi działać na poziomie drzewa. W Emacsie jest to tryb pacyficzny, ale myślę, że inni redaktorzy mają podobne narzędzia lub wtyczki.

+0

Widzę, w jaki sposób nawiasy są reprezentatywne dla struktury drzewa; Właśnie zastanawiałem się, czy istnieje edytor, który wyświetla drzewo jako schematyczne drzewo dla użytkownika do edycji. (Nie jestem pewien, czy wskaźniki byłyby przyjazne dla użytkownika, ale myślę, że to może zadziałać.) – scarlet

2

Tryb emacs to w rzeczywistości edytor strukturalny.

Również w their paper, Gomółka & Humm wspomnieć prototyp badawczy rozciągający CUSP dla Eclipse, ale nie wiem z pobrania realizacji.

+0

To jest irytujące. Podaj pełny opis edytora struktury, w tym fotki, linie kodu, wyniki ankiety, a następnie wskazówki, gdzie ją uzyskać. (Szczerze mówiąc prawdopodobnie nie przestawiłbym się z emacs w dzisiejszych czasach, ale tak samo.) Dzięki za aktualizację. – scarlet

2

Gingko as a Tree Structure editor for lisp

Pracujemy nad pozwalając Ci write Lisp with Gingko (ogólne struktury drzewa edytora).

Konwersja z drzewa na źródło jest banalna, tak naprawdę jedyne czego brakuje to więcej głębi (Gingko jest obecnie ograniczone do 3 poziomów).

[Jest to nadal bardzo eksperymentalny, więc chciałbym feedback & wejście od Lisp ekspertów.]

Powiązane problemy