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

时间:2017-02-06 01:42:50

标签: emacs lisp common-lisp slime

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

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

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

我想“运行”此脚本并查看以下输出(或其合理变体):

(A C E)

我的缓冲区显示此模式:

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

在尝试运行它时,我尝试了Cc Ck,它创建了一个缓冲区 slime-compilation ,它显示文件被“编译”而没有错误,但是我没有看到获得编译的方法用于通过解释器执行或运行整个脚本的代码。

Slime已安装并正在运行(它是协调编译的内容)。我知道我可以通过表单的形式通过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相同的结果

1 个答案:

答案 0 :(得分:3)

可以想象Lisp源编辑器和Listener(read-eval-print-loop)如何协同工作的各种方式。虽然SLIME通常非常好,但有些交互有点笨拙。

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

  • 选择区域,然后使用SLIME评估区域
  • SLIME评估缓冲区
  • 使用SLIME保存缓冲区,加载缓冲区或编译加载缓冲区

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

您还想要实际打印某些内容,以便了解会发生什么。

在加载/执行之前编译内容可以帮助查找错误。我经常使用它。

缓冲区的实际键盘命令列表见control-h m

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

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

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

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