2011-09-01から1ヶ月間の記事一覧

Haskellの foldr と foldl と foldl'

前の記事で、Haskellでfoldlを使った場合の動作について書きました。 Haskellの評価戦略とfoldl/foldr (1) Haskellの評価戦略とfoldl/foldr (2) ここで、Haskellでfoldlを実際に使ってみて動作を確認してみようと思います。 {- fold1.hs -} import Data.List…

Haskellの評価戦略とfoldl/foldr (2)

前の記事 d:id:linglang:20110909:1315561320 で、 foldl (<+>) (z<+>a0) (a1:[a2,a3,a4,a5,a6]) という式を評価するとき、2通りの簡約(計算)順序があることを示しました。 foldl (<+>) b0 (a1:[a2,a3,a4,a5,a6]) {- 内部簡約 -} foldl (<+>) ((z<+>a0)<+>a1…

Haskellの評価戦略とfoldl/foldr (1)

関数型言語などで再帰を使ってプログラムを書く場合、 末尾再帰はループに最適化されるのでメモリ消費量が少なくなる と、一般には言われます。 が、これは評価戦略によっては成り立たなくなります。 foldlとfoldr リストの内容をある演算子によって畳み込む…