SLIME交互式开发-将代码从缓冲区粘贴到SLIME REPL!= eval命令中

Alb*_*rto 2 evaluation common-lisp asdf slime package

我正在尝试使用已经在package.lisp中定义的asdf创建一个名为“ a”(要学习)的基本软件包,而我的主文件a.lisp的开头是:

(in-package :a)
...
Run Code Online (Sandbox Code Playgroud)

如果我正在开发模块,我只是想通过执行Mx slime-eval-buffer之类的方法将整个缓冲区评估到SLIME REPL中,但这不会发生,在运行该命令后,我仍然处于cl -用户包:

;;; from a.lisp
A> (in-package :a)
#<PACKAGE "A">
CL-USER>     <--- should have stayed in A>
Run Code Online (Sandbox Code Playgroud)

但是,如果我自己将整个代码粘贴到SLIME REPL中,则它已经可以工作了。一遍又一遍地粘贴很多代码对于交互式开发来说根本不是一件好事。

你能帮我吗?您是否对我的问题有任何建议,或者您通常如何应对?

谢谢。

Rai*_*wig 6

Slime:通常不会在repl中评估来自缓冲区的代码

我只想通过执行Mx slime-eval-buffer将整个缓冲区评估为SLIME REPL

该模型不是一个从源缓冲区“评估SLIME REPL”的模型。一个评估连接的Lisp中的代码。连接的Lisp可能会为每个评估请求生成一个线程。

例如,您可以看到在评估缓冲区之后,常规的REPL变量*(例如(最后结果))没有更新。

当将代码粘贴到REPL缓冲区中时,您将从那里执行代码,并在REPL中执行代码。

史莱姆:实际上是从REPL中的缓冲区求值

您可以将代码从Lisp缓冲区评估到REPL中。参见命令c-u m-x slime-eval-last-expression-in-repl或更短的内容c-u c-c c-j。该c-u修饰符使该包装略有不同的行为:

  1. 切换到REPL缓冲区
  2. 切换到源缓冲区包
  3. 评估REPL中的源代码(包括设置REPL变量)
  4. 在REPL缓冲区中打印结果(包括设置REPL变量)
  5. 不要将REPL切换回其先前的软件包

注意:此行为特定于SLIME,不一定是其他环境的行为。