Common Lisp:flush标准输出

时间:2016-12-05 23:49:13

标签: lisp common-lisp stdout

尝试学习lisp(我猜emacs一起)。 我想知道如何清除输出并更换它。 可以是LISP repl,也可以是emacs缓冲区 类似于python中的以下内容。

def go(r):
    for i in range(r):
        sys.stdout.write("\rDoing %i" % i)
        sys.stdout.flush()

1 个答案:

答案 0 :(得分:7)

对于常见的lisp,您正在寻找

Functions FINISH-OUTPUT, FORCE-OUTPUT, CLEAR-OUTPUT

finish-outputforce-outputclear-output控制缓冲流输出的内部处理。

  • finish-output尝试确保发送到输出流的任何缓冲输出已到达目的地,然后返回。

  • force-output启动清空任何内部缓冲区,但不等待完成或确认返回。

  • clear-output尝试中止正在进行的任何未完成的输出操作,以便尽可能少的输出继续到目的地。

Variables *DEBUG-IO*, *ERROR-OUTPUT*, *QUERY-IO*, *STANDARD-INPUT*, *STANDARD-OUTPUT*, *TRACE-OUTPUT*

  • *debug-io*的值,称为调试I / O,是用于交互式调试目的的流。

  • *error-output*的值,称为错误输出,是应向其发送警告和非交互式错误消息的流。

  • *query-io*的值,称为查询I / O,是在询问用户问题时使用的双向流。问题应输出到此流,并从中读取答案。

  • *standard-input*的值,称为标准输入,是一个流,当没有显式提供特定输入流时,许多运算符将其用作默认输入源。

  • *standard-output*的值,称为标准输出,是一个流,当没有显式提供特定的输出流时,许多运算符将其用作输出的默认目标。

  • *trace-output*的值,称为跟踪输出,是跟踪函数(请参阅跟踪)和时间宏打印其输出的流。

Emacs Lisp完全不同,你可能想从这里开始:https://www.gnu.org/software/emacs/manual/html_node/elisp/Output-Functions.html