gpt4 book ai didi

common-lisp - Common Lisp中do循环中的多值绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 22:42:34 25 4
gpt4 key购买 nike

如何在 do 循环中绑定(bind)从函数返回的多个值?
以下显然是非常错误的,但是这样的事情可能吗?

(do (((x y z) (3-val-fn) (3-val-fn)))
((equal y 'some-val) y)
(values x y z))

或者也许有一种方法可以使用多值绑定(bind)来做到这一点?

最佳答案

标准迭代构造中的多个值并不受支持。

使用 LOOP,您的代码段可能如下所示:

(loop with x and y and z
do (setf (values x y z) (3-val-fn))
while (equal y 'some-val)
finally (return y)
do ...)

如果我经常需要这样的东西,我可能会定义一个 do-mv将扩展为上述代码的宏。代码将如下所示:
(do-mv ((x y z) (3-val-fn))
((equal y 'some-val) y)
...)

使用上面的优点是它不会在每次迭代期间从多个值创建列表。从多个值创建列表有点违背了多个值的目的,这些值返回多个值并允许以有效的方式实现它。

关于common-lisp - Common Lisp中do循环中的多值绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41628381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com