2014-09-10 36 views
5

SICP'den, Racket'te #lang planet/neil yönergesini kullanarak sorun yaşıyorum. Kodumu Emacs'e yazmayı tercih ederim ve Emacs aracılığıyla bir REPET REPL çalıştırmak için Geiser modunu kullanıyorum.Çıkış yazdırma stilini Racket REPL'den değiştirme

Raket baskılarının sonuçları, sonuçların okunmasını zorlaştıran çok fazla mcons kullanma eğilimindedir.

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

this other question göre, çıkış tarzı seçin Dil iletişim kutusunda "yazma" çıktı stilini seçerek DrRacket içine değiştirilebilir. Ancak bu, DrRacket GUI gerektirir; Racket REPL için bu ayarı değiştirmenin bir yolu var mı?

cevap

9

Arka plan: SICP stil şemasının aksine, Racket list s değişmezdir. Değişken listeleri almak için, Racket'te mlist kullanın. Ne #lang planet/neil/SICP (Ben guesing) (require mpair) nedir ve mlistlist için yeniden adlandırın. Yani,içinde list yazdığınızda, aslında mlist kullanıyorsunuz.

Yine de, mlist s varsayılan olarak farklı şekilde yazdırılıyor. Ama iki parametreyi değiştirebilirsiniz. yerine parantez özellikleri parantez bir değişken listesi olduğunu belirtmek

{1 2 3 4} 

olarak

print-as-expression

(print-as-expression #f) 

Şimdi yazdırılır. ayarlamak, başka bir parametre o düzenlemek için:

print-mpair-curly-braces

(print-mpair-curly-braces #f) 

Ve şimdi basmalı:

(1 2 3 4) 

düz Raket sahip olmak her zaman bu I do REPL Bu iki ifadeyi Racket init file’unuza koyabilirsiniz, örneğin OSX ve Linux'ta ~/.racketrc. Geiser tarafından sağlanan REPL'nin init dosyasını okuduğundan emin olmasam da, bu ifadeleri bir Geiser REPL oturumu için bir kez kullanmanız gerektiğinde değerlendirirseniz, bunları .rkt dosyasına ekleyebilir ve bir kez ziyaret edebilirsiniz.

+1

Teşekkürler! Eklenecek bir şey, REPL SICP içerisindeyken bu komutlara erişilemez, ancak '' enter 'yazıp 'f' yazıp 'C-c C-m' ye basarak üst seviyeye geri dönebilirim. – crowding

+1

Ah, tamam, bu yüzden # SICP onları sağlamadı. Bunları kullanılabilir hale getirmek için '((sadece raport/base print-as-print-mpair-kıvrımlı-kaşlı ayraçlar)) işlevini kullanabilirsiniz. –

+1

Bir sidenote olarak, oldukça kolay bir şekilde, Geiser'i '~/.racket-geiser' içinde bulunan 'geiser-raket-init-dosyanıza yerleştirerek' ~/.racketrc' dosyasını okuyabilirsiniz. varsayılan olarak): '(load (find-system-path 'init-file))' – GDP2