Emacs 使用plt-R5R而不是Racket调用Geiser?
当使用Geiser和Emacs进行方案编程时,如何设置Geiser以调用plt-r5rs遗留方案,或者可能是R6RS变体,而不是在“Racket”模式下调用RacketEmacs 使用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式的
我希望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"))))