【问题标题】:Evaluating in buffer different from evaluating in slime?在缓冲区中评估与在粘液中评估不同?
【发布时间】:2014-09-07 19:32:06
【问题描述】:

我正在使用 emacs 学习如何使用通用 lisp 进行编程,但遇到了一个令人困惑的问题。当我输入表达式时

(defconstant +some-constant+ (make-hash-table))

我用它来评估它

M-x eval-buffer

我得到了错误

Symbol's function definition is void: defconstant

但是,如果我将其复制并粘贴到 slime repl 中,它会完美运行。当然,这提供了大多数方便的键盘快捷键,用于在您的程序中评估 lisp 代码,而无需执行整个程序。每当我想测试某些东西时,我最终都会将缓冲区中的所有内容复制到粘液终端中。

这是怎么回事?

【问题讨论】:

    标签: emacs lisp common-lisp slime


    【解决方案1】:

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

    一般来说,如果你看到一个没有 slime- 前缀的 lisp 相关命令,它可能是一个 emacs-lisp 工具。

    【讨论】:

    • 当我使用 C-c C-k 时,它会编译,但是当我尝试通过 slime repl 执行我在文件中定义的任何函数时,它会抱怨该函数未定义?
    • 嗯。这不是应该发生的事情,也不是我得到的行为。确保文件在您的 lisp 中加载正常(通过在 emacs 之外的独立会话中加载它)。
    • @mooglinux 同样,如果您将代码放在单独的包中(在缓冲区/文件顶部使用 cl:in-package),请确保您在 REPL 中切换了包(使用相同的 cl:in-package)。
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多