使用CLTL2 附录 A 中的 SERIES 库,我想要一个来自嵌套系列的平面系列。例如:
(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) ) )
我想把这一系列系列变成一个系列,如下所示:
=> #Z( (4 . 1) (4 . 2) (4 . 3)
(5 . 1) (5 . 2) (5 . 3)
(6 . 1) (6 . 2) (6 . 3) )
如果我有一个适当的串联函数,那就太好了。虽然系列库有 CATENATE 函数,但它的 &rest 参数只需要一些系列。我可以
(apply #'catenate list-of-series)
但它接受系列列表,而不是系列系列。不幸的是,没有用于折叠系列的任何功能,而有用于映射和过滤的功能。A.4 中所示的 PRODUCING 宏。CLTL2 中的 Primitives 部分对我不起作用,因为它似乎也不能展平嵌套循环。我不能在嵌套情况下使用 NEXT-OUT 宏。