在使用Geiser和Emacs進行Scheme編程時,如何設置Geiser在「racket」模式下調用plt-r5rs傳統方案或可能的R6RS變體,而不是Racket?用plt-r5rs而不是Racket調用Geiser?
我希望Racket能夠在REPL中的R5RS(或可能是R6RS)模式下工作,而不是在球拍模式下,這種模式越來越偏離「標準」模式。
在使用Geiser和Emacs進行Scheme編程時,如何設置Geiser在「racket」模式下調用plt-r5rs傳統方案或可能的R6RS變體,而不是Racket?用plt-r5rs而不是Racket調用Geiser?
我希望Racket能夠在REPL中的R5RS(或可能是R6RS)模式下工作,而不是在球拍模式下,這種模式越來越偏離「標準」模式。
以下內容添加到您的geiser-racket-init-file
:
(require r5rs/init)
然後在Emacs初始化文件(縣)的地方堅持這樣的建議:
(defadvice run-racket (after enter-r5rs activate)
(switch-to-geiser-module "r5rs"))
這應該給你GEISER一個R5RS十歲上下的經驗。
編輯:
我不得不最近處理這個問題,並發現我上面的回答是不夠的。對於初學者來說,簡單地將模塊切換到r5rs
由於某種奇怪的原因而沒有加載應該在該模塊中的符號,例如set-car!
或set-cdr!
。我發現,使用geiser-repl-import-module
代替switch-to-geiser-module
效果更好,因爲它實際上將加載預期符號,如set-car!
,set-cdr!
等。另外,使用(geiser-repl-import-module "r5rs")
的行爲人得到由DrRacket運行#lang r5rs
行爲相匹配,因此它可能是足以滿足大多數人。但是,如果你仍然想運行在GEISER的plt-r5rs
可執行文件,你可以嘗試以下方法:
(progn
(flet ((geiser-racket--parameters() nil))
(let ((geiser-racket-binary "plt-r5rs")
(geiser-repl-skip-version-check-p t))
(ignore-errors
(run-geiser 'racket))
;; to keep your racket history from getting clobbered
(setq-local geiser-repl-history-filename "~/.emacs.d/.plt-r5rs_history"))))
不幸的是,從代碼片斷產生的REPL功能是比較原始的(例如,你不能自動完成符號)。這是因爲我們刪除了geiser-racket--parameters
,因爲這些參數與plt-r5rs
和R5RS本身不兼容。通過執行C-u M-x run-scheme RET plt-r5rs
,您會獲得非常類似的功能和較少的卷積。
僅供參考,我在下面編輯了我的答案,以獲得更多信息並比以前更好地工作,現在可能會發現它可以接受。 – GDP2