無限オブ無限
無限オブ無限 - d.y.d. via 「無限オブ無限」をやってみた - sshi.Continual
僕もHaskellでやってみました。有限・無限のリストがまざっていても大丈夫なハズです。
module Main (main) where infListOfInfList :: [[String]] infListOfInfList = do c <- cycle ['a' .. 'z'] return [c : n : "" | n <- cycle $ ['0' .. '9']] infListFlatten :: [[a]] -> [a] infListFlatten = f 1 where f _ [] = [] f n xs = let (xs1, xs2) = splitAt n xs (hs, ts) = unzip $ map (\ (y : ys) -> (y, ys)) $ filter (not . null) xs1 in hs ++ f (n + 1) (ts ++ xs2) main :: IO () main = print $ take 20 $ infListFlatten infListOfInfList -- => ["a0","a1","b0","a2","b1","c0","a3","b2","c1","d0", -- "a4","b3","c2","d1","e0","a5","b4","c3","d2","e1"]