3

我想运行一个函数,但不让它在终端中输出结果。例如,(set 'A 'B)通常B在控制台中返回如下:

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

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

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

3 回答 3

4

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

普通 Lisp:

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

我不确定 Scheme 中的等价物。

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

例子:

#!/path/to/interpreter
(set 'A 'B)
[rest of program]
于 2013-05-04T01:23:18.297 回答
1

由于打印的值实际上是您的函数的返回值,并且函数的返回值是最后一个表达式的值,您可以简单地在您的末尾/之后添加一个“空”(返回例如“”)指令称呼。

于 2014-03-24T15:33:53.403 回答
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")

输出将是:
文本

而不是:
文本

使用时会打印

(format t "text")
于 2013-06-14T21:22:42.210 回答