Stack
HaskellでStackを書いてみた。
リストの処理をすればいいだけなんですけどね。
代数的データ型の扱いに慣れようと思って
data Stack a = Empty | Value a (Stack a) deriving Show fstack :: Stack String -> String -> Stack String fstack stack str = case str of "pop" -> pop stack otherwise -> push stack str push :: Stack a -> a -> Stack a push stack str = case stack of Empty -> Value str Empty Value value next -> Value value $ push next str pop :: Stack a-> Stack a pop stack = case stack of Value value Empty -> Empty Value value next -> Value value $ pop next main=getContents >>= (\x -> print $ foldl fstack Empty $ words x)
微妙に、main関数内で、無名関数を介したモナドも使ってみる。
モナドをもっと使いこなしたい
popやpushとまったく同様にしてQueueも記述できますね。
簡単に書けたのでよしとする。
push,pop関数自体は、Stack内の型を指定しないので使いまわせるけれど。
普通に使うとなったらリストで充分なのが寂しい笑
実効速度から言っても、そちらの方が早いです。
一応二分木も書いたしな。
ハッシュとか?
あ、リストと代数的データ型の組み合わせとかもやってみるか