2014-09-10 16 views
5

Tôi đang gặp sự cố từ SICP, sử dụng chỉ thị #lang planet/neil trong Racket. Tôi muốn viết mã của tôi trong Emacs, và tôi đang sử dụng chế độ Geiser để chạy một REPL Racket thông qua Emacs.Thay đổi kiểu in đầu ra từ Racket REPL

Cách in kết quả vợt có xu hướng sử dụng rất nhiều mcons làm cho kết quả khó đọc.

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

Theo this other question, phong cách đầu ra có thể được thay đổi bên trong DrRacket bằng cách chọn "viết" kiểu đầu ra trong Chọn Ngôn ngữ hộp thoại. Tuy nhiên điều này đòi hỏi GUI của DrRacket; là có một cách để thay đổi thiết lập này cho REPL vợt?

Trả lời

9

Nền: Không giống như Đề án kiểu SICP, Racket list s là không thay đổi. Để nhận danh sách có thể thay đổi, trong Racket bạn sử dụng mlist. Điều gì #lang planet/neil/SICP hiện (Tôi đang tìm kiếm) là (require mpair) và sau đó đổi tên mlist thành list. Vì vậy, khi bạn viết list trong đó #lang, bạn đang thực sự sử dụng mlist.

Dù sao, theo mặc định, mlist in. Nhưng bạn có thể thay đổi hai tham số.

print-as-expression

(print-as-expression #f) 

Bây giờ nó sẽ in như

{1 2 3 4} 

Các dấu ngoặc nhọn thay vì dấu ngoặc đơn chỉ ra rằng đó là một danh sách có thể thay đổi. Để tinh chỉnh rằng, thiết lập một tham số:

print-mpair-curly-braces

(print-mpair-curly-braces #f) 

Và bây giờ nó nên in như:

(1 2 3 4) 

Để có vợt đồng bằng REPL luôn làm được điều này, tôi nghĩ rằng bạn có thể đặt hai biểu thức này trong số Racket init file của bạn, ví dụ: ~/.racketrc trên OSX và Linux. Mặc dù tôi không chắc liệu REPL được cung cấp bởi Geiser có đọc tệp init hay không, nếu bạn đánh giá các biểu thức đó khi chúng vẫn tồn tại cho phiên REPL của Geiser, vì vậy bạn có thể đặt chúng trong một số tệp .rkt và truy cập nó một lần.

+1

Cảm ơn! Một điều cần thêm, các lệnh này không thể truy cập được khi REPL ở trong SICP, nhưng tôi có thể gõ ', nhập # f' hoặc nhấn' C-c C-m' trong geiser để trở về mức cao nhất. – crowding

+1

Ah, OK, vì vậy '#lang SICP' không cung cấp cho họ. Tôi nghĩ rằng bạn có thể sử dụng '(yêu cầu (chỉ có trong vợt/cơ sở in-như-biểu hiện in-mpair-xoăn-niềng răng))' để làm cho chúng có sẵn. –

+1

Như là một sidenote, bạn có thể, khá dễ dàng, làm cho Geiser đọc tập tin '~/.racketrc' bằng cách đặt những thứ sau vào trong' geiser-racket-init-file' (nằm ở '~/.racket-geiser' theo mặc định): '(tải (tìm-hệ thống-đường dẫn 'init-file))' – GDP2

Các vấn đề liên quan