Mar*_*ark 5 lisp function common-lisp return-value
我已经读过,Common Lisp中的每个表单在评估时都会返回一些内容.但是,最近我一直在玩ASDF API并找到一个什么都不返回的函数:
CL-USER> (asdf:clear-output-translations)
; No value
Run Code Online (Sandbox Code Playgroud)
这怎么可能,为什么不回归NIL呢?
Common Lisp允许函数从0最高MULTIPLE-VALUES-LIMIT值返回.常数MULTIPLE-VALUES-LIMIT是20或更大.
因此,一个常见的习惯用法是(values)在函数没有有用的返回值时使用该形式,并且只是调用副作用.此外,这通常会导致Lisp侦听器(也称为REPL)不打印任何内容作为返回值,这可能是出于审美原因.
请注意,变量只有一个值,并且只能将一个值绑定到变量.
函数可以使用(values)表单不返回任何值.
例如:
(defun foo ()) ;; returns nil
(defun bar () (values)) ;; returns nothing
Run Code Online (Sandbox Code Playgroud)