我如何 运行 lisp 中的 lisp 缓冲区并在 emacs 中查看其输出?

How can I run a lisp buffer in slime and see its output in emacs?

我在缓冲区(文件 ~/firsts.lsp)中有以下代码:

(defun firsts (l)
  (cond
    ((null l) ())
    (T (cons (car (car l)) (firsts (cdr l))))))

(firsts '((A B) (C D) (E F)))

我想 "run" 这个脚本并查看以下输出(或其合理的变体):

(A C E)

我的缓冲区显示此模式:

(Lisp [COMMON-LISP-USER cmucl] adoc)

在尝试 运行 时,我尝试了 C-c C-k,它创建了一个缓冲区 slime-compilation 显示文件 "compiled" 没有错误,但我没有看到通过解释器执行编译代码或 运行 整个脚本的方法。

Slime 已安装并 运行ning(它协调编译)。我知道我可以 运行 通过 repl 的形式,以逐个形式的方式,但我想 运行 整个脚本交互。

软件环境: Mac OS X 10.12.3 GNU Emacs 25.1.1 Slime ChangeLog 日期 2016-04-19 CMU Common Lisp 21b (21B Unicode) 但与 SBCL 1.3.14

结果相同

人们可以想象 Lisp 源代码编辑器和监听器(read-eval-print-loop)如何协同工作的各种方式。虽然 SLIME 总体上很好,但有些交互有点笨拙。

在这种情况下,我使用三种方法来评估缓冲区 SLIME/Emacs:

  • select 区域,然后使用 SLIME
  • 评估该区域
  • SLIME 评估缓冲区
  • 使用 SLIME
  • 保存缓冲区、加载缓冲区或 compile-and-load 缓冲区

请注意,如果您评估事物,结果将打印在迷你缓冲区中。

您还想实际打印一些东西,以便您可以看到会发生什么。

编译 loading/executing 之前的东西有助于发现错误。我经常用。

key-commands 缓冲区的实际列表见 control-h m

关于评估缓冲区时交互的附注

另一种交互方式是将每个表达式提供给 listener/repl 缓冲区,在那里打印结果,直到发生错误或没有更多的表达式。但我不认为 SLIME 直接支持这一点。

LispWorks IDE 允许您评估缓冲区,并且输出(包括评估结果)显示在相应的输出窗格中。

Clozure CL IDE 允许您计算缓冲区,表达式在最顶层的侦听器中计算。打印的是输出和最后的结果。