在缓冲区中评估不同于在粘液中评估?

moo*_*nux 2 lisp emacs common-lisp slime

我正在使用emacs来学习如何在常见的lisp中编程,并且我遇到了一个令人困惑的问题.当我输入表达式时

(defconstant +some-constant+ (make-hash-table))
Run Code Online (Sandbox Code Playgroud)

我用它来评估它

M-x eval-buffer
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Symbol's function definition is void: defconstant
Run Code Online (Sandbox Code Playgroud)

但是如果我将它复制并粘贴到粘液复制品中,它就可以完美地运行.当然,这会渲染大多数方便的键盘快捷键,用于评估程序中的lisp代码,而无需执行整个程序.每当我想测试一些东西时,我最终都会将我的缓冲区中的所有内容复制到粘液终端中.

这里发生了什么?

gsg*_*gsg 7

M-x eval-buffer将缓冲区评估为emacs lisp,而不是Common Lisp.您可能想要C-c C-k,它将编译并加载该文件.

通常,如果您看到一个没有前缀的与lisp相关的命令,slime-那么可能是emacs-lisp工具.