首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使嵌套序列变平?

如何使嵌套序列变平?
EN

Stack Overflow用户
提问于 2013-07-24 05:19:39
回答 1查看 231关注 0票数 1

使用CLTL2附录A系列库,我想要一个嵌套系列中的平面系列。例如:

代码语言:javascript
复制
(map-fn t (lambda (x)
            (map-fn t (lambda (y)
                        (cons x y))
                    (scan '(1 2 3))))
        (scan '(4 5 6)))

=> #Z( #Z( (4 . 1) (4 . 2) (4 . 3) )
       #Z( (5 . 1) (5 . 2) (5 . 3) )
       #Z( (6 . 1) (6 . 2) (6 . 3) ) )

我想把这个系列变成一个系列,如下:

代码语言:javascript
复制
=> #Z( (4 . 1) (4 . 2) (4 . 3)
       (5 . 1) (5 . 2) (5 . 3)
       (6 . 1) (6 . 2) (6 . 3) )

如果我有一个适当的串联功能,它将是好的。尽管系列库具有CATENATE函数,但它在其&rest参数中只接受一些序列。我可以

代码语言:javascript
复制
(apply #'catenate list-of-series)

但它接受的是系列的列表,而不是一系列的系列。不幸的是,没有任何功能的折叠系列,而有映射和过滤。在A.4上显示的产生宏。CLTL2中的原语部分不适用于我,因为它似乎也不平坦嵌套循环。我不能在嵌套的情况下使用下一个宏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 05:53:02

代码语言:javascript
复制
(apply #'catenate
       (collect (map-fn t (lambda (x)
                            (map-fn t (lambda (y)
                                        (cons x y))
                                    (scan '(1 2 3))))
                        (scan '(4 5 6)))))

但这是个小骗局。按顺序正确地做:

代码语言:javascript
复制
(producing (prod) ((zz (generator (map-fn t (lambda (x)
                                              (map-fn t (lambda (y)
                                                          (cons x y))
                                                      (scan '(1 2 3))))
                                          (scan '(4 5 6)))))
                   cur)
           (loop
              (tagbody
               redo
                 (if (null cur)
                     (setq cur (generator (next-in zz (terminate-producing)))))
                 (next-out prod (next-in cur (progn 
                                               (setq cur nil)
                                               (go redo)))))))

=> #Z((4 . 1) (4 . 2) (4 . 3)
      (5 . 1) (5 . 2) (5 . 3)
      (6 . 1) (6 . 2) (6 . 3))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17825760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档