我想运行一个函数,但不让它在终端中输出结果。例如,(set 'A 'B)
通常B
在控制台中返回如下:
>>> (set 'A 'B)
B
>>> A
B
我不希望它返回任何东西;我仍然希望函数做它应该做的事情,只是默默地:
>>> (set 'A 'B)
>>> A
B
它并不完美,但您可以在表达式末尾使用 (values) 来抑制输出。你会得到一个空行。
普通 Lisp:
(progn (set 'A 'B) (values))
我不确定 Scheme 中的等价物。
lisp REPL 总是打印一些返回值。如果您真的不想要输出,您可以在终端中将代码作为脚本运行。
例子:
#!/path/to/interpreter
(set 'A 'B)
[rest of program]
由于打印的值实际上是您的函数的返回值,并且函数的返回值是最后一个表达式的值,您可以简单地在您的末尾/之后添加一个“空”(返回例如“”)指令称呼。
我得到了与 user1613254 相同的解决方案,但是我为此做了一个宏(在我的 .sbclrc 中有它):
(defmacro m-ignore (fun &body body)
"ignores the return value of a function"
`(progn (,fun ,@body)
(values)))
你像这样使用它:
(m-ignore format t "text")
输出将是:
文本
而不是:
文本
无
使用时会打印
(format t "text")