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) ) )
以下のように、このシリーズのシリーズを1つのシリーズにしたいと思います。
=> #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 のプリミティブ セクションは、ネストされたループを平坦化しないように見えるため、機能しません。ネストされた状況で NEXT-OUT マクロを使用できません。