common-lisp - 如何在 Common Lisp 中迭代返回多个值

标签 common-lisp

要返回多个值,可以使用 (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/

相关文章:

口齿不清 : How do I install gcl in mac

macos - 如何为 OSX 设置 Common Lisp 开发环境? (编程新手)

web - 如何从其他 RESTAS 模块访问 RESTAS 子模块的上下文

lisp - Lisp 中的神经网络 - 建议

lisp - 复杂循环优化

lisp - 普通 lisp 中的居中文本

common-lisp - 避免在 lisp 中实现 OR 宏函数的副作用

lisp - 在 Common Lisp 中使用 &rest 参数

lisp - 在 Common Lisp 中交换列表元素

common-lisp - 成为类型说明符的坏事 : number