2

我有 SLIME 和 SBCL 的 emacs。而且我遇到了一个问题,即emacs将'FORMAT'定义为格式字符串和rest对象,因此在REPL中,当我尝试评估(格式t“hello”)之类的内容时,出现错误:错误的类型参数:stringp , t

这是要覆盖的功能的情况吗?如何让 emacs 使用 SBCL 中定义的函数?

猜猜这是一个相当简单的新手问题,但是用谷歌搜索“格式”关键字真的很难:)

4

2 回答 2

7

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

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 本身感兴趣,您应该阅读以下书籍:

祝你好运。

于 2011-02-02T17:50:14.897 回答
1

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

于 2011-02-03T14:20:01.600 回答