You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Common Lisp的main函数返回多个子函数的所有返回值?

解决方案:用multiple-value-call合并多值返回

要让main函数返回所有子函数的全部返回值,你可以使用Common Lisp的multiple-value-call函数,它能收集多个函数调用产生的所有返回值,再通过values函数统一返回。

实现代码

(defun main ()
  (multiple-value-call #'values
    (run-function-1 ...)
    (run-function-2 ...)
    (run-function-3 ...)
    (run-function-4 ...)
    (run-function-5 ...)))

原理说明

  • multiple-value-call会依次执行每个子函数调用,收集它们产生的所有返回值(不管每个函数返回几个值)。
  • 最后把这些收集到的所有值作为参数传给values函数,values会将所有参数作为多值返回,这样main就会输出总计10个返回值。

验证示例

假设子函数的返回值数量如下:

(defun run-function-1 () (values 1 2))  ; 返回2个值
(defun run-function-2 () (values 3))     ; 返回1个值
(defun run-function-3 () (values 4 5 6)) ; 返回3个值
(defun run-function-4 () (values 7 8))   ; 返回2个值
(defun run-function-5 () (values 9 10))  ; 返回2个值

调用main后,可以用multiple-value-bind绑定所有返回值进行验证:

(multiple-value-bind (v1 v2 v3 v4 v5 v6 v7 v8 v9 v10) (main)
  (format t "所有返回值:~a ~a ~a ~a ~a ~a ~a ~a ~a ~a"
          v1 v2 v3 v4 v5 v6 v7 v8 v9 v10))

执行后会输出:所有返回值:1 2 3 4 5 6 7 8 9 10,符合预期。

内容的提问来源于stack exchange,提问作者Vinn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:10:29