防止LISP中的终端输出

时间:2013-05-04 00:44:02

标签: lisp output

我想运行一个函数,但没有将结果输出到终端。例如,(set 'A 'B)通常会在控制台中返回B,如下所示:

 >>> (set 'A 'B)
 B
 >>> A
 B

我不希望它返回任何东西;我仍然希望函数能够做到它应该做的事情,只是默默地:

 >>> (set 'A 'B)
 >>> A
 B

3 个答案:

答案 0 :(得分:3)

它并不完美,但您可以在表达式的末尾使用(值)来抑制输出。你得到一个空行。

Common Lisp:

(progn (set 'A 'B) (values))

我不确定Scheme中的等价物。

lisp REPL始终打印一些返回值。如果你真的不想输出,可以在终端中将代码作为脚本运行。

示例:

#!/path/to/interpreter
(set 'A 'B)
[rest of program]

答案 1 :(得分:1)

由于打印的值实际上是函数的返回值,并且函数的返回值是最后一个表达式的值,因此您可以在结尾添加一个“空”(返回例如“”)指令。 /在你的电话之后。

答案 2 :(得分:0)

我找到了与user1613254相同的解决方案,但我为此制作了一个宏(将它放在我的.sbclrc中):

(defmacro m-ignore (fun &body body)
"ignores the return value of a function"
  `(progn (,fun ,@body) 
  (values)))

你这样使用它:

(m-ignore format t "text")

输出结果为:
文本

而不是:
文字
NIL

使用

时会打印

(format t "text")