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では破壊的変更を行わないため、リストに変更を加える関数の実装は、新たにリストを作成して返却する。」という事くらいでしょうか。
今更な気はします、頭で解っているのとモノにしているのとでは大分違うので、これを機にちゃんと飲み込んでおこうと思います。

次回は演算子と関数の関係についてまとめます。
今日はもう遅いのでここまで、おやすみなさい。