我已经读过,Common Lisp中的每个表单在评估时都会返回一些内容。但是,最近我一直在使用ASDF API并找到一个不返回任何内容的函数:
CL-USER> (asdf:clear-output-translations)
; No value
这怎么可能?为什么它不会返回NIL
之类的内容?
答案 0 :(得分:8)
Common Lisp允许函数从0
到MULTIPLE-VALUES-LIMIT值返回。常量MULTIPLE-VALUES-LIMIT
为20
或更大。
函数VALUES允许返回multiple values,包括零值。
因此,当函数没有有用的返回值并且只是为副作用调用时,常用的习惯是使用(values)
形式。此外,这通常会导致Lisp侦听器(也称为REPL)不会将任何内容打印为返回值,这对于审美原因非常有用。
请注意,变量只有一个值,而且只能将一个值绑定到变量。
答案 1 :(得分:6)
函数不能使用(values)
形式返回任何值。
例如:
(defun foo ()) ;; returns nil
(defun bar () (values)) ;; returns nothing