如何返回常见的lisp中的最后一个值

jak*_*ter 2 lisp return common-lisp

我知道values函数有助于控制REPL,但我想显式返回函数的最后一个值.唯一接近我设法找到我想要的东西是

 (setf (values q a) (floor 1.5))
Run Code Online (Sandbox Code Playgroud)

但我只对它返回的0.5感兴趣.我的问题是我怎么才能只返回函数的最后一个值而不仅仅是第二个值而是第n个值(以它为准)?

jki*_*ski 5

没有标准运算符来获取最后一个值,甚至没有迭代值,但您可以使用MULTIPLE-VALUE-CALL以下方法解决此问题:

(defun last-arg (&rest args)
  (first (last args)))

(defmacro multiple-value-last (form)
  `(multiple-value-call #'last-arg ,form))

(multiple-value-last (floor 1.5))
; => 0.5
(multiple-value-last (values 10 20 30))
; => 30
Run Code Online (Sandbox Code Playgroud)

至少在SBCL上,标准MULTIPLE-VALUE-LIST似乎是以这种方式实现的.