理想未来ってなんやねん

娘可愛い。お父さん頑張る。

ふつうのHaskellプログラミング

『ふつうのHaskellプログラミング』本買いました。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

帯に書いてある、
Haskellの考え方と仕様を学び、プログラマとしてのスキルアップを目指す。』

という言葉がイカしてます。


自分は職業プログラマとしては今年で定年なので、プログラマとしてのスキルアップの部分は若い人にお任せます。
あくまで趣味です。

今まで色々やってきましたが、関数型言語って知らないんですよね。

こんなニッチな言語の本はたいした売れない。
どうせ絶版なるのは目に見えているので、とりあえず買っておきました。
(絶版になると買えなくなくなるので・・・)

関数型言語とはなんぞや!

Haskellとは関数型言語なのですが、関数型言語とはなんぞや!というと、
オブジェクト指向言語は、プログラムがオブジェクトで中心で構成されている様に、関数型言語のプログラムは関数で構成されているのです。

関数ならC言語にもあるじゃん!

とか、思うのですが、

関数型言語の場合は、遅延評価が基本となります。

遅延評価については追々と

インストール

とりあえずインストールしてみます。
この本の説明ではHaskell処理系はGHCがスタンダードらしい。

MacPortsであれば、

sudo port install ghc

でインストールできます。
簡単ですね!

こんな時に、Macって本当に便利!と感じます。

使ってみる

本書の最初に、お約束のHello worldHaskellで書いたプログラムが載っています。

こんな感じ、

main = putStrLn "Hello, World!"

コードを簡単に説明すると、

『main =』が変数mainの定義
『putStrLn』が関数
"Hello, World!"は文字列リテラル

mainの値は関数ではなく、アクション。
アクションを評価すると、入出力等が実行されます。


Haskellの拡張子は.hsらしい。
プログラムをhello.hsというファイル名で保存して、コンパイルします。

$ ghc hello.hs -o hello

helloという実行ファイルが出来るので、

$ ./hello
Hello, World!

で実行。
簡単ですね。

今日のところは2章まで読み終わり。

読んだ中で、tailのコードが結構面白いかなと

main = do cs <- getContents
          putStr $ lastNLines 10 cs

lastNLines n cs = unlines $ takeLast n $ lines cs

takeLast n ss = reverse $ take n $ reverse ss

説明は今度。
そんな感じで、今日はここまで。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

目次

  • 第1部 Haskellの概要
    • 第1章 Haskellプログラミングを始めよう
      • 1.1 Haskellとは
      • 1.2 Haskell処理系の準備
      • 1.3 Hello, World
      • 1.4 本章のまとめ
    • 第2章 Haskellの基礎
      • 2.1 Haskell基礎の概要
      • 2.2 mainアクションと関数適用
      • 2.3 入出力の基本
      • 2.4 リスト処理の基本(1) countlineコマンド
      • 2.5 リスト処理の基本(2) headコマンド
      • 2.6 リスト処理の基本(3) tailコマンド
      • 2.7 本章のまとめ
      • 2.8 練習問題
    • 第3章 Haskellの基礎(2) 型と高階関数
      • 3.1 型と値
      • 3.2 高階関数
      • 3.3 パターンマッチ(1)
      • 3.4 パターンマッチ(2)
      • 3.5 本章のまとめ
      • 3.5 練習問題
      • 第4章 Haskellの基礎(3) モジュールと総合演習
      • 4.1 コマンドライン引数の処理とモジュール
      • 4.2 総合演習
      • 4.3 本章のまとめ
      • 4.4 練習問題
  • 第2部 Haskellの全貌
    • 第5章 遅延評価
      • 5.1 遅延評価とは
      • 5.2 遅延評価のシミュレーション
      • 5.3 遅延評価の利点と欠点
      • 5.4 本章のまとめ
    • 第6章 基本的な値
      • 6.1 本章の構成
      • 6.2 真偽値
      • 6.3 数値
      • 6.4 文字と文字列
      • 6.5 タプル
      • 6.6 リスト
      • 6.7 実習:cat -n コマンド
      • 6.8 本章のまとめ
      • 6.9 練習問題
    • 第7章 基本的な構文
      • 7.1 コメント
      • 7.2 レイアウト
      • 7.3 if式
      • 7.4 パターンマッチ
      • 7.5 case 式
      • 7.6 関数定義
      • 7.7 定義と束縛
      • 7.8 本章のまとめ
      • 7.9 練習問題
    • 第8章 関数
      • 8.1 値としての関数
      • 8.2 関数合成
      • 8.3 部分適用
      • 8.4 ポイントフリースタイル
      • 8.5 本章のまとめ
      • 8.6 練習問題
    • 第9章 型と型クラス
      • 9.1 静的型チェックと型推論
      • 9.2 代数的データ型
      • 9.3 型の別名と付け替え
      • 9.4 型クラス
      • 9.5 本章のまとめ
      • 9.6 練習問題
    • 第10章 モジュール
      • 10.1 モジュールの基本概念
      • 10.2 モジュールの定義とエクスポート
      • 10.3 インポート
      • 10.4 本章のまとめ
    • 第11章 モナド
      • 11.1 モナドとは何か
      • 11.2 Maybeモナド
      • 11.3 型の別名と付け替え
      • 11.4 型クラス
      • 11.5 本章のまとめ
      • 11.6 練習問題
  • 第3部 実践Haskellプログラミング
    • 第12章 Wikiエンジンの開発
      • 12.1 第3部の目的
      • 12.2 プログラムの概要
      • 12.3 CGIの処理
      • 12.4 コントローラの実装
      • 12.5 モデルの実装
      • 12.6 ビューの実装
      • 12.7 本章のまとめ
    • 第13章 Wiki記法パーサの開発
      • 13.1 本章の概要
      • 13.2 HTMLの処理
      • 13.3 インライン要素のパーサ
      • 13.4 ブロック要素のパーサ
      • 13.5 パーサコンビネータライブラリの実装
      • 13.6 本章のまとめ
    • 第14章 本書を読み終えたあとに
      • 14.1 Haskell言語
      • 14.2 Haskellを使ったプログラミング開発
      • 14.3 ドキュメント
  • 付録
  • 索引