当前位置:  开发笔记 > 编程语言 > 正文

Common Lisp中do循环中的多个值绑定

如何解决《CommonLisp中do循环中的多个值绑定》经验,为你挑选了1个好方法。

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

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

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



1> Rainer Joswi..:

实际上不支持标准迭代结构中的多个值.

使用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)
  ...)

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有