Haskell 4日目
Haskellの勉強4日目
今日は第4章 モジュールと総合演習です。
コマンドライン引数の処理とモジュール
echoコマンドのソースコードを引用します。
import System main = do args <- getArgs putStrLn $ unwords args
他のモジュールで定義されている関数などを使いたいときにはimport宣言を使う。
getArgsはコマンドライン引数を読み込むアクション。アクションの結果は文字列のリスト。
unwordsはリストの各要素を空白を挟んで連結して文字列にする。
上のソースは引数を読み込んで、空白を挟んで連結し標準出力に出力する。
モジュール
importがわかったので、標準のモジュールにどんなものがあるのか調べてみた。
他にもあるだろうが、P.251に書かれているものを列挙する。
モジュール名 | 内容 |
---|---|
Prelude | 言語の基本的な関数、型、型クラスなど |
Ratio | 有理数 |
Complex | 複素数 |
Numeric | 数値 |
Ix | 値と整数とのマッピング |
Array | 配列 |
List | リストに関連したユーティリティ |
Maybe | Maybeモナド |
Char | 文字に関連したユーティリティ |
Monad | モナドに関連したユーティリティ |
IO | 入出力 |
Directory | ディレクトリ(フォルダ)の操作 |
System | コマンドライン引数や環境変数など |
Time | 日付や時刻 |
Locale | ロケール |
CPUTime | CPU時間の取得 |
Random | ランダムな数値の取得 |
Preludeモジュール(Prelude module)は基本的な型や関数が定義されており、暗黙のうちにインポートされる。
getContentsやlines関数、リストや整数などの型もPreludeモジュールで定義されている。
総合演習
fgrepコマンドのソースコードを引用します。
import System import List main = do args <- getArgs cs <- getContents putStr $ fgrep (head args) cs 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
新しい機能がでて、ちょっと楽しくなってきましたね。
where節は後置型の構文で、ある式だけに有効な定義を導入する。
式 where 定義1 定義2 定義3
特定の関数内だけで使う関数を定義したいときに使う。
head関数はリストの最初の要素を返す。
filter関数は第2引数で指定したリストの各要素に第1引数で指定した関数を適用した結果がTrueになる要素だけをリストとして返す関数。
any関数は、第2引数で指定したリストの各要素に、第1引数で指定した関数を適用し、そのいずれかの値がTrueならTrueを返す関数。
tails関数は、第1引数で指定したリストそのもの、第1引数で指定したリストの第2要素以降、第1引数で指定したリストの第3要素以降、・・・をリストにして返す関数。
例えば、
tails [1, 2, 3, 4]
の場合、
tails [[1, 2, 3, 4], [2, 3, 4], [3, 4], [4], []]
というリストになる。
isPrefixOf関数は第1引数で指定したリストが第2引数の先頭に一致するときにTrueを返す。
pattern `isPrefixOf` lineのように、2引数の関数を``で囲むと、その関数があたかも中間演算子のように使えるようになり、英語らしく読めるので理解しやすくなる。
今日のところはここまで。
明日は第2部、第5章 遅延評価に入ります。
関連記事
[Haskell][プログラミング言語][関数型言語]Haskell 3日目
[Haskell]Haskellのリファレンスマニュアルを検索するツール href
[Haskell][プログラミング言語][関数型言語]ふつうのHaskellプログラミング
[プログラミング言語]ハッカーを目指す者が習得すべき5つのプログラミング言語
[プログラミング言語]プログラミング言語ヒエラルキー
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 314回
- この商品を含むブログ (320件) を見る