要返回多个值,可以使用 (values v1 v2 v3)
如何从 do
循环中迭代返回多个值?换句话说,我想在do循环中构建多值返回的值,但我只能构建一个列表。我知道 values-list
,但使用多个值的目的是不构建列表。
有没有什么方法可以在不构造列表的情况下迭代返回多个值?
最佳答案
如果您的 Common Lisp 实现支持堆栈分配,那么这将是一种处理方法。
例如在 LispWorks 中这是可能的:
(defun foo (list)
(let ((vlist (make-list (length list)
:initial-element nil)))
(declare (dynamic-extent vlist)) ; allocate VLIST on the stack
(values-list (map-into vlist #'1+ list)))) ; return VLIST as values
以类似的方式,可以使用 DO
来设置堆栈分配列表。
LispWorks 识别用于堆栈分配的 MAKE-LIST
结合 dynamic-extent
声明。 SBCL 没有,但可以使用类似 LIST 的东西来进行堆栈分配。
关于common-lisp - 如何在 Common Lisp 中迭代返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64470637/