関数

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のコーディングスタイルとして、一つの関数はとても短いものなのかな?
だから、引数が目に見えなくても、容易にイメージ出来るってことかな?