我有 SLIME 和 SBCL 的 emacs。而且我遇到了一个问题,即emacs将'FORMAT'定义为格式字符串和rest对象,因此在REPL中,当我尝试评估(格式t“hello”)之类的内容时,出现错误:错误的类型参数:stringp , t。
这是要覆盖的功能的情况吗?如何让 emacs 使用 SBCL 中定义的函数?
猜猜这是一个相当简单的新手问题,但是用谷歌搜索“格式”关键字真的很难:)
Emacs Lisp和Common 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 本身感兴趣,您应该阅读以下书籍:
祝你好运。
经过一番调查,我发现 .emacs 配置文件中的 SLIME 初始化脚本不正确。所以,当我使用的是低级 lisp 时,它不是 SBCL。这是解释此事的链接:slime-devel list。所以,我改为(setq inferior-lisp-program "/some/path/to/sbcl/executable.exe")
在(setq inferior-lisp-program "sbcl")
配置文件中。这让我以完美的方式来到 SBCL :)