使用plt-r5rs而不是Racket调用Geiser?

时间:2016-12-15 11:32:17

标签: emacs scheme lisp racket geiser

当使用Geiser和Emacs进行Scheme编程时,如何设置Geiser来调用plt-r5rs遗留方案,或者可能是R6RS变体,而不是在" racket"模式?

我希望Racket能够在REPL中以R5RS(或可能是R6RS)模式运行,而不是以球拍模式运行,这种模式越来越偏离标准"方案

1 个答案:

答案 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,您将获得非常相似的功能和更少的卷积。