当使用Geiser和Emacs进行方案编程时,如何设置Geiser来调用plt-r5rs遗留方案,或者可能是R6RS变量,而不是Racket在“Racket”模式下?
我希望Racket在REPL中以R5RS(或者可能是R6RS)模式运行,而不是Racket模式,它越来越偏离“标准”模式。

最佳答案

在您的geiser-racket-init-file中添加以下内容:

(require r5rs/init)

然后将此建议粘贴到Emacs初始化文件中的某个位置:
(defadvice run-racket (after enter-r5rs activate)
  (switch-to-geiser-module "r5rs"))

这应该给你一个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可以获得非常相似的功能和更少的卷积。

10-07 23:40