07012010 Haskell
数の子が好き。数の子のあんま入ってない松前漬けは認めない派です。年始は、松前漬けの数の子で、日本酒やってた。
そんなわけで、鯡数というものを思いついたのでHaskellで。
import System.IO.UTF8 as U
unfold p h t x | p x = []
| otherwise = h x : unfold p h t (t x)
int2bin = reverse . unfold (==0) (`mod`2) (`div`2)
kazunoko :: [Int] -> String
kazunoko [] = ""
kazunoko (s:xs) | s == 1 = '魚' : (kazunoko xs)
| s == 0 = '非' : (kazunoko xs)
| otherwise = error "not binary"
nishin :: Int -> String
nishin = kazunoko . int2bin
main = do U.putStrLn $ nishin 2010
unfoldはプログラミングHaskellから。この本いいです、マジ。
さて実行
$ runhaskell nishin.hs
魚魚魚魚魚非魚魚非魚非
プログラミングHaskell
Software Design (ソフトウエア デザイン) 2009年 04月号 [雑誌]
プログラミングHaskell
Real World Haskell―実戦で学ぶ関数型言語プログラミング
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
Higher-Order Perl: Transforming Programs with Programs