ネットワークを切断してブラウザもメーラも IRC も落とした、 ゆぞさん言うところの「殺伐とした環境」だと作業効率がとてもいいことがわかった。 インターネットに発する煩悩の数は 108 どころではないのだ。
さ、もう一回ネットワーク切ろっと。
(09:51)
where を使えば部分適用なしでも fgrep が書けることに気付いたんだけど、 where で変数共有するのと部分適用じゃ どちらが理解しにくいかは微妙なところですな。 なんとなく、Java な人なら where のが簡単そうな気がするんだけど。
-- where を使う import System import List main = do args <- getArgs cs <- getContents putStr $ fgrep (head args) cs fgrep pattern cs = unlines $ filter match $ lines cs where match line = any prefixp $ tails line prefixp str = pattern `isPrefixOf` str -- 部分適用を使う import System import List main = do args <- getArgs cs <- getContents putStr $ fgrep (head args) cs fgrep pattern cs = unlines $ filter (match pattern) $ lines cs match pattern line = any (pattern `isPrefixOf`) $ tails line
うーん、部分適用があると関数合成も使いたくなってしまうな……。
ちなみに最終的にはこうなる。
-- 最終版 import System import List main :: IO () main = do args <- getArgs case args of [pattern] -> putStr . fgrep pattern =<< getContents _ -> error "wrong argument" fgrep :: String -> String -> String fgrep pattern = unlines . filter (match pattern) . lines match :: String -> String -> Bool match pattern = any (pattern `isPrefixOf`) . tails
(10:21)
http://www.vector.co.jp/magazine/softnews/060107/n0601076.html
プログラム名がナイスすぎる。
(13:36)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.