Function 公共Lisp函数未返回任何值

Function 公共Lisp函数未返回任何值,function,lisp,common-lisp,return-value,Function,Lisp,Common Lisp,Return Value,我读过,CommonLisp中的每个表单在计算时都会返回一些内容。但是,最近我一直在使用ASDF API,发现了一个不返回任何内容的函数: CL-USER> (asdf:clear-output-translations) ; No value 这是怎么可能的,为什么它不返回类似于NIL?函数可以使用(值)表单不返回值 例如: (defun foo ()) ;; returns nil (defun bar () (values)) ;; returns nothing Common

我读过,CommonLisp中的每个表单在计算时都会返回一些内容。但是,最近我一直在使用ASDF API,发现了一个不返回任何内容的函数:

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

这是怎么可能的,为什么它不返回类似于
NIL

函数可以使用
(值)
表单不返回值

例如:

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

Common Lisp允许函数从
0
返回至多个值。常数
多值限值
20
或更大

该函数允许返回,包括零值

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


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

在这种情况下,我宁愿返回
nil
。。。有趣的是,表达式
(eq nil(values))
在CLISP和SBCL上的计算结果为
T
。@Mark:在Common Lisp中,不能将参数的零值传递给函数参数。因此,它被
NIL
取代。因此,
EQ
返回
T
是因为
NIL
是EQ到
NIL
多值调用
可以用于允许任意参数的函数。例如,
(多值调用#'=0(值));=>t
但是
(多值调用#'eq nil(值))
不起作用,因为
eq
只需要两个参数。