在使用 Geiser 和 Emacs 进行 Scheme 编程时,如何设置 Geiser 以调用 plt-r5rs 旧方案,或者可能是 R6RS 变体,而不是“球拍”模式下的球拍?
我希望 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-ish 体验。
编辑:
我最近不得不处理这个问题,发现我上面的答案是不够的。对于初学者来说,由于某种奇怪的原因,简单地将模块切换到r5rs
并没有加载应该在该模块中的符号,例如,set-car!
或set-cdr!
。我发现 usinggeiser-repl-import-module
而不是switch-to-geiser-module
效果更好,因为它实际上会加载预期的符号,例如set-car!
,set-cdr!
等。此外,使用的行为与在 DrRacket 中(geiser-repl-import-module "r5rs")
运行所获得的行为相匹配#lang r5rs
,因此对于大多数人来说可能就足够了。但是,如果您仍想plt-r5rs
在 Geiser 中运行可执行文件,您可以尝试以下操作:
(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 功能相当原始(例如,您不能自动完成符号)。这是因为我们正在删除这些参数,因为这些参数与 R5RS 本身geiser-racket--parameters
不兼容。plt-r5rs
你会得到非常相似的功能和更少的卷积C-u M-x run-scheme RET plt-r5rs
。