在Common Lisp中反转多个值的顺序

Woj*_*Gac 1 lisp functional-programming common-lisp

我一直在考虑以下问题.假设我正在处理一个返回多个值的函数,例如truncate.有没有一种聪明的方法来反转返回的值的顺序?我说的是比一些更聪明的东西

(multiple-value-bind (div rem) (truncate x y)
  (values rem div))
Run Code Online (Sandbox Code Playgroud)

Tim*_*sko 5

我不知道这有多聪明,但这就是你想要的:

(reverse (multiple-value-list (the-function-that-returns-multiple-values)))
Run Code Online (Sandbox Code Playgroud)

在这里,多值列表是关键.

要将这些值再次作为单独的值返回,请使用values-list:

(values-list (reverse (multiple-value-list (the-function-that-returns-multiple-values))))
Run Code Online (Sandbox Code Playgroud)

这整页可能很有启发性.