【问题标题】:Invoke Geiser with plt-r5rs rather than Racket?用 plt-r5rs 而不是 Racket 调用 Geiser?
【发布时间】:2016-12-15 11:32:17
【问题描述】:

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

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

【问题讨论】:

  • 仅供参考,我在下面编辑了我的答案以获得更多信息并比以前更好地工作,您现在可能会发现它可以接受。

标签: emacs scheme lisp racket geiser


【解决方案1】:

将以下内容添加到您的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") 的行为与通过运行获得的行为相匹配#lang r5rs 在 DrRacket 中,所以对于大多数人来说可能就足够了。但是,如果您仍想在 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"))))

不幸的是,从该代码的 sn-p 生成的 REPL 功能相当原始(例如,您不能自动完成符号)。这是因为我们删除了geiser-racket--parameters,因为这些参数与plt-r5rs 和R5RS 本身不兼容。通过执行C-u M-x run-scheme RET plt-r5rs,您将获得非常相似的功能和更少的卷积。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2015-07-21
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多