在使用Geiser和Emacs进行Scheme编程时,如何设置Geiser在“racket”模式下调用plt-r5rs传统方案或可能的R6RS变体,而不是Racket?用plt-r5rs而不是Racket调用Geiser?
我希望Racket能够在REPL中的R5RS(或可能是R6RS)模式下工作,而不是在球拍模式下,这种模式越来越偏离“标准”模式。
在使用Geiser和Emacs进行Scheme编程时,如何设置Geiser在“racket”模式下调用plt-r5rs传统方案或可能的R6RS变体,而不是Racket?用plt-r5rs而不是Racket调用Geiser?
我希望Racket能够在REPL中的R5RS(或可能是R6RS)模式下工作,而不是在球拍模式下,这种模式越来越偏离“标准”模式。
以下内容添加到您的geiser-racket-init-file
:
(require r5rs/init)
然后在Emacs初始化文件(县)的地方坚持这样的建议:
(defadvice run-racket (after enter-r5rs activate)
(switch-to-geiser-module "r5rs"))
这应该给你GEISER一个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
,您会获得非常类似的功能和较少的卷积。
仅供参考,我在下面编辑了我的答案,以获得更多信息并比以前更好地工作,现在可能会发现它可以接受。 – GDP2