Emacs粘液管理、用户输入、多评估和打印

Emacs粘液管理、用户输入、多评估和打印,emacs,lisp,slime,Emacs,Lisp,Slime,我在ubuntu 19上。 使用emacs、slime和sbcl练习一些lisp 目前我在一个窗口中有一个处于粘液模式的缓冲区,在另一个窗口中有粘液描述 当我想执行一行时,我把它写在缓冲区上,然后按C-C-p 但是当我试着对线路做同样的事情时 (defvar *name* (read)) 要使用用户输入设置名称var,则不会发生任何事情 为什么? 另外,我想执行整个脚本,而不是一次执行一行,我该怎么做?什么都没有发生,因为read正在等待您在REPL处键入内容。如果您查看REPL,您会感到困惑

我在ubuntu 19上。 使用emacs、slime和sbcl练习一些lisp

目前我在一个窗口中有一个处于粘液模式的缓冲区,在另一个窗口中有粘液描述

当我想执行一行时,我把它写在缓冲区上,然后按C-C-p

但是当我试着对线路做同样的事情时

(defvar *name* (read))
要使用用户输入设置名称var,则不会发生任何事情

为什么?


另外,我想执行整个脚本,而不是一次执行一行,我该怎么做?

什么都没有发生,因为
read
正在等待您在REPL处键入内容。如果您查看REPL,您会感到困惑,因为您正在评估的表单没有显示,所以您所看到的只是。。。没什么,但你需要在上面键入一些东西。此外,从您的描述中还不清楚显示了哪些缓冲区,但我怀疑REPL不是其中之一,这将使情况变得更糟

我不知道其他人是如何使用黏液的,但我要做的是至少要有REPL(在一个窗口中键入
M-x-slime
后得到的东西,在另一个窗口中输入我正在处理的文件。然后,只需键入REPL即可与它交互,并使用
C-M-x
或任何其他命令将代码从文件发送到正在运行的lisp。)(特别是编译和加载文件的
C-C-k

但是,您几乎不希望正在编译或加载的文件包含任何导致在编译或加载时调用
read
的内容:委婉地说,结果将是神秘的:系统将停止,没有提示等待您键入内容。在REPL中这样做更有意义:

CL-USER> (defvar *name* (read))
(here is the data I am typing in)
*NAME*

确实,即使你在加载文件时调用一些代码来调用<代码> Read <代码>非神秘的内容,但是你必须继续进一步的长度才能使它们安全。考虑这个文件,<代码>毒素.LISP < /代码>:

(defvar *my-thing*
  (progn
    (format *query-io* "~&thing? ")
    (finish-output *query-io*)
    (read *query-io*)))
现在:

当然,我本可以对Lisp说比这更糟糕的话。

教程:
$ lisp
[...]
(load "toxin" :verbose t)
;Loading #P"toxin"...
thing? #.(quit)