【问题标题】:Conflicting(?) 'FORMAT' function of emacs and SBCLemacs和SBCL的冲突(?)'FORMAT'功能
【发布时间】:2011-06-20 02:19:08
【问题描述】:

我有带有 SLIME 和 SBCL 的 emacs。我遇到了一个问题,即 emacs 将 'FORMAT' 定义为 format 字符串 &rest 对象,所以在 REPL 中,当我试图评估类似 (format t "hello") 的东西时,我得到了错误:错误类型参数:stringp, t.

这是要重写的函数的情况吗?如何让 emacs 使用 SBCL 中定义的函数?

猜这是一个相当简单的新手问题,但 'format' 关键字真的很难 google :)

【问题讨论】:

  • 很可能,您使用了错误的 REPL。在你尝试的地方如何命名缓冲区?
  • 我使用 ielm 根据 Jorge 的回答,它可能是错误的 REPL。

标签: emacs lisp slime sbcl


【解决方案1】:

Emacs LispCommon Lisp(SBCL 是它的一种实现)是两种不同的语言;就好像你在问如何从你的 Emacs Lisp 调用 Java 的 System.out.println

Emacs Lisp 用于扩展和自定义 Emacs 的行为。

Common Lisp 是一种通用编程语言,其中有多种实现,SBCL 就是其中之一。它与 Emacs 或 Emacs Lisp 无关(可能在历史和文化上除外)。

SLIME 是一个从 Emacs 中与正在运行的 Common Lisp 图像对话的工具,您必须首先使用 M-x slime 启动它;启动 SLIME 后,您可以将表单发送到 *slime-repl sbcl* 缓冲区内正在运行的 Common Lisp 映像(在您的情况下为 SBCL)。

您将找到另一个名为*scratch* 的缓冲区,您可以在其中键入和评估Emacs Lisp 表单。请记住,这与 Common Lisp 无关。

但是,您需要注意的是,有一个 Emacs Lisp 扩展,它为 Emacs Lisp 添加了许多 Common Lisp 结构,但它仍然是 Emacs Lisp,如果您阅读了相关内容,请不要感到困惑。

是的,一开始可能会令人困惑,但别担心,这只是暂时的。

编辑: 我想补充一点,如果您对 Common Lisp 感兴趣,您应该阅读以下一本或所有书籍:

另一方面,如果您对扩展和自定义 Emacs 本身感兴趣,您应该阅读以下书籍:

祝你好运。

【讨论】:

  • 感谢您如此冗长的回答,豪尔赫!它有助于将我对问题的调查转移到正确的方式:) 另外,我对 CL 很感兴趣,并使用 Practical Common Lisp 研究它,只是被这个开发环境问题困住了。
  • 同时学习 Common Lisp 和 Emacs+SLIME 有时会让人困惑。当我开始学习 Common Lisp 时,我完全避免使用 Emacs。只有在我对 Common Lisp 感到满意后,我才开始研究如何使用 Emacs 和 SLIME。您可以使用任何其他能够正确处理 Common Lisp 缩进并为您管理括号的编辑器,并将表单从中复制并粘贴到正在运行的 REPL。另一种选择是使用 LispWorks IDE 的个人版; lispworks.com 它是免费的,为您提供了一个随时可用的开发环境。
【解决方案2】:

经过一番调查,我发现 .emacs 配置文件中的 SLIME 初始化脚本不正确。所以,当我使用的是低级 lisp 时,它不是 SBCL。这是解释此事的链接:slime-devel list。 所以,我在配置文件中将(setq inferior-lisp-program "/some/path/to/sbcl/executable.exe") 更改为(setq inferior-lisp-program "sbcl")。这让我以完美的方式加入了 SBCL :)

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2012-01-06
    • 1970-01-01
    • 2015-07-02
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2017-09-14
    相关资源
    最近更新 更多