ようこそ。睡眠不足なプログラマのチラ裏です。

いまさら聞けないアルゴリズム その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書いたら若干忘れかけてた(^ω^;)