【问题标题】:How can I run a lisp buffer in slime and see its output in emacs?如何在 slime 中运行 lisp 缓冲区并在 emacs 中查看其输出?
【发布时间】:2017-06-22 21:28:39
【问题描述】:

我在缓冲区中有以下代码(文件 ~/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 史莱姆更新日志日期 2016-04-19 CMU Common Lisp 21b (21B Unicode) 但结果与 SBCL 1.3.14 相同

【问题讨论】:

  • @jenesaisquoi C-c C-b 绑定到粘液中断。 slime 手册没有提到 slime-eval-buffer(尽管该命令使用 M-x slime-eval-buffer 工作,但似乎没有键绑定)。
  • @RainerJoswig 该链接指向粘液文档,但不包括看似正确的粘液评估缓冲区,文档中的所有命令都不是我要问的。最接近的是 slime-eval-region 但这并不理想。
  • @decuser:如果你想看到输出,那么你需要输出一些东西。查看 Common Lisp 中的各种打印例程。然后你可以在 slime 手册中看到如何加载一些东西,然后它也会执行输出一些东西的代码。

标签: emacs lisp common-lisp slime


【解决方案1】:

您可以想象 Lisp 源代码编辑器和侦听器(读取-评估-打印-循环)如何协同工作的各种方式。虽然 SLIME 通常相当不错,但有些交互有点笨拙。

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

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

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

你还想实际打印一些东西,这样你就可以看到发生了什么。

在加载/执行之前编译可以帮助发现错误。我经常用那个。

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

评估缓冲区时的交互说明

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多