1

在使用 Geiser 和 Emacs 进行 Scheme 编程时,如何设置 Geiser 以调用 plt-r5rs 旧方案,或者可能是 R6RS 变体,而不是“球拍”模式下的球拍?

我希望 Racket 在 REPL 中以 R5RS(或可能是 R6RS)模式运行,而不是在越来越偏离“标准”方案的球拍模式下运行。

4

1 回答 1

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!。我发现 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

于 2017-01-25T02:55:26.117 回答