2012-04-11 10 views
3

Ich versuche gerade, in Racket/Scheme ein wenig zu tauchen. Ich habe eine Instanz der (X) REPL, die neben meinem Editor läuft, was mir immens hilft, die Sprache zu erkunden. Ich kann jedoch keinen XREPL-Befehl oder Makro (oder was auch immer) finden, der mir den Quellcode einer Funktion zeigt.Gibt es eine Möglichkeit, den Quellcode einer Funktion im Racket REPL anzuzeigen?

Alle benötigten Teile scheinen es zu sein:

XREPL der describe Befehl kennt die Datei:

-> ,describe string-join 
; `string-join' is a bound identifier, 
; defined in racket/string.rkt 
; required directly 

und get-collects-search-dirs kennt den Weg:

-> (require setup/dirs) 
-> (get-collects-search-dirs) 
'(#<path:/home/richard/.racket/5.2.1/collects> 
    #<path:/usr/local/lib/racket/collects>) 

Und auf der Reflexionsseite Dinge, die wir haben:

-> (procedure-arity string-join) 
2 

Aber es ist alles andere als nützlich, wenn Sie nur wissen möchten, wie Sie die Funktion aufrufen. Gibt es eine Möglichkeit, auf die Implementierung der Funktion oder zumindest auf die Parameternamen zuzugreifen?

Oder, was würde auch für mich funktionieren - eine Art von REPL-Klartext entspricht der Dokumentation, die help öffnet?

Antwort

3

Vor ein paar Wochen wurde der Befehl XREPL ,describe erweitert, um die Funktionsargumentnamen und den Vertrag zu drucken; source.

Dies ist die "blaue Box" aus der Racket Dokumentation - so genannt, weil sie vor dem Racket 6 CSS Redesign blau war; jetzt sind sie wirklich grau :).

Sie können dies durch den Bau Racket von HEAD erhalten. Ansonsten sollte es in der nächsten Version nach 6.1 sein.

Beachten Sie, dass dies scheinbar auf Funktionen beschränkt ist, die Scribble-Dokumentation in installierten Paketen enthalten.

+0

akzeptiert dies jetzt seit ', beschreiben' ist in 6.1.1 und tut genau das, was ich wollte - Danke für das Update! – rwos

4

Eli Barzilay stellt fest, dass das Projekt Geisercode enthält, um diese Dokumentation zu extrahieren.


ich ein experimentelles Stück Quellcode, die den Text aus dem HTML-Dokumentation extrahiert, obwohl dieser Code bitrotted haben.

Siehe: https://github.com/dyoo/wescheme-docs/blob/master/test-extract-docstring.rkt

und ihre Abhängigkeiten, die in leben: https://github.com/dyoo/wescheme-docs.

Die extract-docstring.rkt Bibliothek, die ich schrieb, funktioniert unter Racket 5.2.1, aber ich bin zugegebenermaßen einige wirklich eklige, hacky Dinge zu extrahieren, um Text aus der Dokumentation zu extrahieren.

Es kann sich lohnen, den Leuten auf der Racket Users mailing list zu sagen, dass der Zugriff auf die textbasierte Dokumentation von xrepl eine wichtige Sache ist; vielleicht wird es den Schwung bewegen.

+3

Dies kam einige Male auf der Mailing-Liste, es gibt keine gute Möglichkeit, das zu tun, da Funktionen ziemlich komplizierte Argumentlisten haben können (zum Beispiel könnte es 'case-lambda' mit verschiedenen Argumentnamen und Zweck für 2 und für 3 Argumente). Der ernsthafteste Versuch, dies zu tun, ist wahrscheinlich [Geiser] (http://www.nongnu.org/geiser/). –

+0

Danke, ich sehe es mir an! @EliBarzilay: Ich benutze keine Emacs, aber Geisers [Lösungen] (http://git.savannah.gnu.org/cgit/geiser.git/tree/scheme/racket/geiser/autodoc.rkt) sehen gut aus Startpunkt. Vielen Dank! – rwos

+0

@rwos: Sie können auch die Mailinglistenarchive durchsuchen - wir hatten eine Diskussion über diese Probleme mit Jao, als er daran arbeitete. –

3

Ich bin mir nicht sicher, ob dies für Racket gilt, aber im MIT-Schema gibt es ein paar eingebaute Prozeduren, die Sie in die Nähe bringen. (Unten proc steht nur für jedes Verfahren)

  1. (procedure-arity proc) wie Sie geben Sie erwähnt die Anzahl der Argumente
  2. (pa proc) wird die Argumentliste
  3. (pp proc) druckt den Körper des
  4. Verfahren drucken

Dies funktioniert für viele der integrierten Verfahren sowie alle, die Sie selbst definieren, aber wenn Sie versuchen, eines dieser auf einem speziellen Formular wie oderaufrufenwird ein Fehler angezeigt.

+1

'pa' und' pp' sind genau die Art von was ich suche - leider bietet Schläger sie nicht – rwos

Verwandte Themen