関数
8.4 ポイントフリースタイル
この章では、以前作成したfgrep.hsというソースコードを
ポイントフリースタイルを使って書き直しています。こんな感じ。
- fgrep.hs(修正前)
fgrep :: String -> String -> String fgrep pattern cs = unlines $ filter match $ lines cs where match :: String -> Bool match line = any prefixp $ tails line prefixp :: String -> Bool prefixp line = pattern `isPrefixOf` line
- fgrep.hs(修正後)
fgrep :: String -> String -> String fgrep pattern = unlines . filter match . line where match :: String -> Bool match = any (pattern `isPrefixOf`) . tails
参考書では、最終的にはwhere節も取っ払っていますけど、
こちらの方が比較しやすいので、where節は残してあります。
まだ関数合成に慣れないからかも知れませんが、
私には引数があった方が理解しやすいです。
あってもなくても変わらない、というのは頭では分かりますけど、
やっぱり引数が目に見えた方が安心できます。
これって、頭が手続き型指向だからかな?
関数を追跡する時って、引数がどのように処理されているかを追っていきますよね。
その引数を自分の頭の中でイメージしないといけない、というのはちょっと慣れませんね。
まだHaskellのソースコードをあまり目にしているわけではないんですが…、
たとえばC言語だと、スパゲッティな関数をあちこちで見かけるので、
そちらを連想してしまいがちですが、
Haskellのコーディングスタイルとして、一つの関数はとても短いものなのかな?
だから、引数が目に見えなくても、容易にイメージ出来るってことかな?