プログラミング

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 リストの内容をある演算子によって畳み込む…

ログに色をつけるスクリプト試し書き

syslog に色をつけてみるテスト。 tail -f /var/log/syslog | ruby log_color.rb とかやると適当に色つきで表示される。 #!/usr/bin/ruby1.8 -Ku ESC_DEFAULT = "\x1b[39m" ESC_RED = "\x1b[31m" ESC_YELLOW = "\x1b[33m" ESC_BLUE = "\x1b[34m" ESC_CYAN = …