当使用Geiser和Emacs进行Scheme编程时,如何设置Geiser来调用plt-r5rs遗留方案,或者可能是R6RS变体,而不是在" racket"模式?
我希望Racket能够在REPL中以R5RS(或可能是R6RS)模式运行,而不是以球拍模式运行,这种模式越来越偏离标准"方案
答案 0 :(得分:1)
将以下内容添加到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!
。我发现使用geiser-repl-import-module
代替switch-to-geiser-module
效果更好,因为它实际上会加载set-car!
,set-cdr!
等预期符号。此外,使用{{1}的行为通过在DrRacket中运行(geiser-repl-import-module "r5rs")
来匹配获得的行为,因此它对大多数人来说可能已经足够了。但是,如果您仍想在Geiser中运行#lang r5rs
可执行文件,则可以尝试以下操作:
plt-r5rs
不幸的是,来自该代码片段的结果REPL功能相当原始(例如,您无法自动完成符号)。这是因为我们删除了(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"))))
,因为这些参数与geiser-racket--parameters
和R5RS本身不兼容。通过执行plt-r5rs
,您将获得非常相似的功能和更少的卷积。