我有与SLIME和SBCL的emacs。而且我遇到了emacs将'FORMAT'定义为格式字符串和休息对象的问题,所以在REPL当我试图评估类似(格式t“hello”)时,我收到错误:错误的类型参数:stringp,t 。
是否覆盖了函数的情况?如何让emacs使用SBCL中定义的功能?
猜猜这是一个相当简单的新手问题,但谷歌的'格式'关键字真的很难:)
答案 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很完美:)