リスト内包表記を忘れていた

倍数になる13進数に挑戦。最初に書いたのはこれです。

main = print $ head $ filter (\n -> (radix_13_10 n `mod` n) == 0) [10..]

radix_13_10 :: Int -> Int
radix_13_10 0 = 0
radix_13_10 n = (radix_13_10 (n `div` 10)) * 13 + (n `mod` 10)

できた、と思って投稿されているプログラムをチェック。

Haskell のリスト内包表記だと殆ど問題文そのままに書けますね。

そういえばありましたね。自分でも使ってみました。

main = print $ head $ [x | x <- [10..], radix_13_10 x `mod` x == 0]

radix_13_10 :: Int -> Int
radix_13_10 0 = 0
radix_13_10 n = (radix_13_10 (n `div` 10)) * 13 + (n `mod` 10)