いまさら聞けないアルゴリズム その1「ハノイの塔」 Part.2
前回に引き続きまして、Haskell版「ハノイの塔」も書いてみた。
{-ハノイの塔-} main :: IO () main = putStr $ concat $ [write x | x <- hanoi "A" "B" "C" 3] hanoi :: String -> String -> String -> Int -> [(String, String)] hanoi _ _ _ 0 = [] hanoi a b c n = hanoi a c b (n - 1) ++ [(a, b)] ++ hanoi c b a (n - 1) write :: (String, String) -> String write x = (fst x) ++ " -> " ++ (snd x) ++ "\n"
実行結果
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
やっぱり、再帰は関数型言語の方が断然美しく書ける感じだ。
というか、ひさびさにHaskell書いたら若干忘れかけてた(^ω^;)