Haskellでスタックを実装する
以前から、Haskellには副作用が無いので、スタックの実装をするにはどうすれば良いのか、という事を色々思いめぐらせたりしていたのですが、悩んでても仕方がないので調べてみたら、思いの外単純でした。
大抵のサンプルでは、ちゃんと型を指定していたりするので、それなりにごにょごにょ書かれては居るのですが、最低限の部分だけ対話モードで記述してみます。
Prelude> let push = (:) Prelude> let pop (x:xs) = (x,xs) Prelude> let empty = []
説明不要なほど簡単に纏まってしまいました。
Prelude> let s = push 3 $ push 1 $ push 4 $ empty Prelude> s [3,1,4] Prelude> pop s (3,[1,4]) Prelude> pop $ snd $ pop s (1,[4])
ええと、どうしましょう。
最初スタックを作ると決めたときに、ひと通り色々試したら、色々と所感を垂れ流そうと思っていたのですが、題材がマズかったような気がします。
今回のポイントは、「Haskellでは破壊的変更を行わないため、リストに変更を加える関数の実装は、新たにリストを作成して返却する。」という事くらいでしょうか。
今更な気はします、頭で解っているのとモノにしているのとでは大分違うので、これを機にちゃんと飲み込んでおこうと思います。
次回は演算子と関数の関係についてまとめます。
今日はもう遅いのでここまで、おやすみなさい。