Common Lisp函数没有返回任何值

时间:2014-08-15 06:54:45

标签: function lisp common-lisp return-value

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

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

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

2 个答案:

答案 0 :(得分:8)

Common Lisp允许函数从0MULTIPLE-VALUES-LIMIT值返回。常量MULTIPLE-VALUES-LIMIT20或更大。

函数VALUES允许返回multiple values,包括零值。

因此,当函数没有有用的返回值并且只是为副作用调用时,常用的习惯是使用(values)形式。此外,这通常会导致Lisp侦听器(也称为REPL)不会将任何内容打印为返回值,这对于审美原因非常有用。

请注意,变量只有一个值,而且只能将一个值绑定到变量。

答案 1 :(得分:6)

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

例如:

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