2014-09-10 4 views
5

라켓에서 #lang planet/neil 지시문을 사용하여 SICP에서 문제가 발생했습니다. Emacs에 코드를 작성하고 Geiser 모드를 사용하여 Emacs를 통해 Racket REPL을 실행하고 싶습니다.Racket REPL에서 출력 인쇄 스타일 변경

라켓 인쇄 결과는 mcons을 많이 사용하는 경향이있어 결과를 읽기 어렵게 만듭니다.

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

this other question에 따르면, 출력 스타일은 언어 선택 대화 상자에서 "쓰기"출력 스타일을 선택하여 DrRacket 내에서 변경 될 수 있습니다. 그러나 여기에는 DrRacket GUI가 필요합니다. Racket REPL에 대해이 설정을 변경하는 방법이 있습니까?

답변

9

배경 : SICP 스타일 구성표와 달리 라켓 list은 변경할 수 없습니다. 변경 가능한 목록을 얻으려면 라켓에서 mlist을 사용하십시오. 무엇 #lang planet/neil/SICP (나는 추측하고있다)은 (require mpair)이고 mlist의 이름을 list으로 바꿉니다. 따라서 을 #lang에 입력하면 실제로는 mlist이 사용됩니다.

어쨌든 mlist은 기본적으로 다르게 인쇄됩니다. 그러나 두 가지 매개 변수를 변경할 수 있습니다. 대신 괄호의 중괄호가 변경 가능한 목록입니다 나타냅니다

{1 2 3 4} 

print-as-expression

(print-as-expression #f) 

는 이제 인쇄 할 수 있습니다. 설정, 다른 매개 변수 를 조정할 :

print-mpair-curly-braces

(print-mpair-curly-braces #f) 

을하고 지금은 인쇄해야합니다 :

(1 2 3 4) 

가 일반 라켓을 가지고 항상 I, 할 REPL 이 두 표현식을 Racket init file에 넣을 수 있다고 생각합니다. OSX 및 Linux의 ~/.racketrc Geiser가 제공 한 REPL이 init 파일을 읽었는지 확신 할 수는 없지만 일단 Geiser REPL 세션을 위해이 표현식을 평가하면 그 파일을 .rkt 파일에 넣고 한 번 방문하면됩니다.

+1

감사! REPL이 SICP 내부에있을 때이 명령에 접근 할 수 없지만 geiser에서'# f'를 입력하거나 'C-c C-m'을 눌러 최상위 레벨로 돌아갈 수 있습니다. – crowding

+1

아, 그래,'#lang SICP'는 그들을 제공하지 않습니다. 난 당신이'(라켓 /베이스 인쇄 - 표현식 인쇄 - mpair - 중괄호)()를 사용할 수 있다고 생각 사용할 수 있도록'). –

+1

사이드 바를 사용하면 Geiser가'~/.racketrc '파일을'geiser-racket-init-file' ('~/.racker-geiser'에 위치)에 놓음으로써 쉽게 읽을 수 있습니다. 기본적으로) :'(load (find-system-path 'init-file))' – GDP2