emacs和SBCL的冲突(?)'FORMAT'功能

时间:2011-02-02 16:12:54

标签: emacs lisp slime sbcl

我有与SLIME和SBCL的emacs。而且我遇到了emacs将'FORMAT'定义为格式字符串和休息对象的问题,所以在REPL当我试图评估类似(格式t“hello”)时,我收到错误:错误的类型参数:stringp,t

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

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

2 个答案:

答案 0 :(得分:8)

Emacs Lisp Common 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本身,您应该阅读以下书籍:

祝你好运。

答案 1 :(得分:1)

经过一番调查后,我发现.emacs配置文件中的SLIME init脚本不正确。所以,当我使用劣质lisp时,它不是SBCL。以下是解释此事的链接:slime-devel list。 所以,我在配置文件中将(setq inferior-lisp-program "/some/path/to/sbcl/executable.exe")更改为(setq inferior-lisp-program "sbcl")。这让我觉得SBCL很完美:)