Common Lisp函数没有返回任何值

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呢?

Rai*_*wig 9

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

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

因此,一个常见的习惯用法是(values)在函数没有有用的返回值时使用该形式,并且只是调用副作用.此外,这通常会导致Lisp侦听器(也称为REPL)不打印任何内容作为返回值,这可能是出于审美原因.

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

  • @Mark:您不能将零值传递给Common Lisp中的函数参数.因此它被"NIL"取代.因此,"EQ"返回"T"是因为"NIL"等于"NIL". (4认同)
  • `multiple-value-call`可以用于允许任意参数的函数.例如.`(多值调用#'= 0(值)); ==> t`但是`(多值调用#'eq nil(values))`将不起作用,因为`eq`只需要两个参数. (3认同)

dmi*_*_vk 7

函数可以使用(values)表单不返回任何值.

例如:

(defun foo ()) ;; returns nil
(defun bar () (values)) ;; returns nothing
Run Code Online (Sandbox Code Playgroud)