Emacs 使用plt-R5R而不是Racket调用Geiser?

Emacs 使用plt-R5R而不是Racket调用Geiser?,emacs,scheme,lisp,racket,geiser,Emacs,Scheme,Lisp,Racket,Geiser,当使用Geiser和Emacs进行方案编程时,如何设置Geiser以调用plt-r5rs遗留方案,或者可能是R6RS变体,而不是在“Racket”模式下调用Racket 我希望Racket在REPL中以R5RS(或可能是R6RS)模式运行,而不是以Racket模式运行,这与“标准”方案的偏差越来越大。将以下内容添加到您的geiser Racket init文件中: (require r5rs/init) 然后将此建议粘贴到Emacs初始化文件中的某个位置: 这应该会让你在盖瑟有一个R5RS式的

当使用Geiser和Emacs进行方案编程时,如何设置Geiser以调用plt-r5rs遗留方案,或者可能是R6RS变体,而不是在“Racket”模式下调用Racket


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

将以下内容添加到您的
geiser Racket init文件中

(require r5rs/init)
然后将此建议粘贴到Emacs初始化文件中的某个位置:

这应该会让你在盖瑟有一个R5RS式的体验

编辑:

我最近不得不处理这个问题,发现我的上述回答是不够的。对于初学者来说,简单地将模块切换到
r5rs
,由于某种奇怪的原因,并没有加载本应在该模块中的符号,例如
设置汽车
设置cdr。我发现使用
geiser repl import module
而不是
切换到geiser module
效果更好,因为它实际上会加载预期的符号,例如
set car
设置cdr,等等。此外,使用
(geiser repl导入模块“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

FYI,您将获得非常相似的功能和更少的卷积。我在下面编辑了我的答案,以获得更多信息并比以前更好地工作,您现在可能会发现它是可以接受的。
(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"))))