如何让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
相关产品推荐
相关产品推荐

