Common Lisp函数未返回任何值

No value returned by Common Lisp function

我已经阅读到Common Lisp中的每个表单在评估时都会返回一些信息。但是,最近我一直在使用ASDF API,发现一个不返回任何内容的函数:

1
2
CL-USER> (asdf:clear-output-translations)
; No value

这怎么可能?为什么不返回类似NIL的内容?


通用Lisp允许函数从0返回最多MULTIPLE-VALUES-LIMIT个值。常量MULTIPLE-VALUES-LIMIT20或更大。

函数VALUES允许一个返回多个值,包括零个值。

因此,当函数没有有用的返回值且仅出于副作用而被调用时,通常的习惯用法是使用(values)形式。同样,这通常也会导致Lisp侦听器(也称为REPL)不打印任何内容作为返回值,这出于美学原因可能很有用。

请注意,变量仅具有一个值,并且只能将一个值恰好绑定到变量。


函数不能使用(values)形式返回任何值。

例如:

1
2
(defun foo ()) ;; returns nil
(defun bar () (values)) ;; returns nothing