アルファベットの繰り上がり
エロと風俗情報満載 どう抜く?より。リストモナド。カンマを間に挟んで出力するのはfoldl1が便利かも。1がポイント。
module Main (main) where columnNumbers :: [String] columnNumbers = map f [c1 : c2 : [] | c1 <- ' ' : ['A' .. 'Z'], c2 <- ['A' .. 'Z']] where f (' ' : xs) = xs f xs = xs main :: IO () main = putStrLn $ foldl1 (\ r s -> r ++ ", " ++ s) $ take 100 columnNumbers
出力: (適当に改行しています。)
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA , AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU , AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK, BL, BM, BN, BO , BP, BQ, BR, BS, BT, BU, BV, BW, BX, BY, BZ, CA, CB, CC, CD, CE, CF, CG, CH, CI , CJ, CK, CL, CM, CN, CO, CP, CQ, CR, CS, CT, CU, CV
(追記)
アルファベットの繰り上がり - sshi.Continual
そうかー。intersperseなんてものがありました。(putStrLn . concat . intersperse ", ")でOKです。