2014-09-10 9 views
5

Ich mache Probleme von SICP, mit der #lang planet/neil Richtlinie in Racket. Ich würde es vorziehen, meinen Code in Emacs zu schreiben, und ich benutze Geiser-Modus, um eine Racket REPL durch Emacs zu betreiben.Ändern der Ausgabe Druckstil von Racket REPL

Die Art und Weise, wie Racket Ergebnisse druckt, neigt dazu, eine Menge von mcons zu verwenden, was die Ergebnisse schwer lesbar macht.

[email protected]> (list 1 2 3 4) 
(mcons 1 (mcons 2 (mcons 3 (mcons 4 '()))))  

Nach this other question kann der Ausgang Artinnere DrRacket geändert werden, indem die „Schreiben“ Ausgabestil im Dialogfeld Sprache auswählen auswählen. Dies erfordert jedoch die DrRacket-Benutzeroberfläche. Gibt es eine Möglichkeit, diese Einstellung für den Racket REPL zu ändern?

Antwort

9

Hintergrund: Im Gegensatz zu SICP-Stil Schema, Racket list s sind unveränderlich. Um veränderbare Listen zu erhalten, verwenden Sie im Racket mlist. Was #lang planet/neil/SICP tut (ich bin guesing) ist (require mpair) und dann umbenennen mlist zu list. Wenn Sie list in diesem schreiben, verwenden Sie tatsächlich mlist.

Wie auch immer, mlist s wird standardmäßig anders gedruckt. Aber Sie können zwei Parameter ändern.

print-as-expression

(print-as-expression #f) 

Jetzt wird es drucken, wie

{1 2 3 4} 

Die geschweiften Klammern statt Klammern zeigen an, dass es sich um eine veränderbare Liste ist. Zwicken dass, stellen einen weiteren Parameter:

print-mpair-curly-braces

(print-mpair-curly-braces #f) 

Und jetzt sollte es drucken, wie:

(1 2 3 4) 

Um die Ebene Schläger haben REPL tun dies immer, ich Ich denke, Sie könnten diese beiden Ausdrücke in Ihre Racket init file setzen, z ~/.racketrc auf OSX und Linux. Obwohl ich nicht sicher bin, ob die REPL von Geiser die Init-Datei liest, wenn Sie diese Ausdrücke einmal auswerten, sollten sie für eine Geiser REPL-Sitzung bestehen, also könnten Sie sie in eine .rkt Datei legen und sie einmal besuchen.

+1

Danke! Eine Sache hinzuzufügen, diese Befehle sind nicht zugänglich, wenn die REPL in SICP ist, aber ich kann eingeben, geben Sie # f' oder drücken Sie 'C-c C-m' in Geiser, um zurück zur obersten Ebene zu gelangen. – crowding

+1

Ah, OK, also '#lang SICP' bietet sie nicht an. Ich denke, Sie können '(erfordern (nur-in-Racket/Base-Print-as-Ausdruck Print-Mpair-Curly-geschweifte Klammern)), um sie verfügbar zu machen. –

+1

Als Nebenbemerkung können Sie Geiser ziemlich leicht dazu bringen, die '~/.racketrc'-Datei zu lesen, indem Sie Folgendes in Ihre' Geiser-Racket-Init-Datei' (die sich unter '~/.racket-geiser befindet) einfügen standardmäßig): '(load (find-system-path 'init-file))' – GDP2

Verwandte Themen