SE情報技術研究会’s blog

http://se-info-tech.connpass.com

2015-12-06 『ふつうのHaskellプログラミング』 もくもく読書会(第1章) の振り返り

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

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

第1章 Haskellの概要

Haskellとは

関数型言語

関数型プログラミング

  • 関数を中心にしてプログラムを組み立てるプログラミング

Haskellの関数

  • 引数と返り値の対応関係を記述したもの
  • メソッドのようにクラスに所属しているわけではない
  • 常に値を返す

Haskellの利点

  • 柔軟にプログラミングできる
  • コンパイル時にの型チェックが強力
  • 読みやすい
  • 遅延評価が基本

柔軟にプログラミングできる

  • 関数それ自体を値として活用できる

高階関数

  • 関数を引数として受け取ったり、返したりする関数
  • 「関数を引き数としてとる」≠「関数の返り値を引数に取る」※ 第3章で説明される

(疑問点や感想)
filterの例っだと、そもそもfilter関数について知ってないとわかりづらいのでは?

filter関数について

filter リストの要素に対してBool値を返す関数 リスト

filter関数は受け取ったリストの要素に対してTrueかFalseを判定し、Trueのもののみで構成されたListを返す関数

コンパイル時にの型チェックが強力

  • 他の言語だとキャストやvoidポインタを使わないと要素の型が柔軟にできない
  • Haskellでは多相型(polymorphic)という機能で様々な型を統一的に扱える
  • 型のチェックはコンパイル時に行われる
  • Javaの総称型は複雑すぎ

読みやすい

  • 再代入がないので読みやすい → グローバル変数を使うと、変数がいつどこで変更したかわかりにくい
  • 再代入の禁止を言語仕様上制限しているので絶対できなくなる

遅延評価が基本

評価とは

  • 「評価」は「実行」と似たような意味
  • 「式を評価する」 = 式を実行して値を得たり入出力したいるすることを指す

遅延評価

  • まず関数を評価して、それから実際に必要になった引数だけを評価する

(疑問点や感想)
いまいち遅延評価の説明がわかりづらい → 第5章で詳細が述べられてるそうなので、そこまで待つ

Haskellの「壁」

  • Haskellは難しい
  • 用語がわかりづらい
  • 数学の例が多い
  • インストールで挫折 → インストーラーを使えばOK
  • 型エラーが大量に出る
  • 型が難しい
  • モナドがわからない

Haskellのインストール

情報が古いのでホームページで最新の情報を仕入れたほうがよい

Hello, World!!

ghcコマンド

コンパイル&実行(Windows

  1. コマンドプロンプトを開いて、ソースファイルのフォルダに移動
  2. ghc hello.hd -o hello
  3. hello

コンパイルすると下記のファイルができる

  • hello.exe
  • hello.hi
  • hello.o

runghcコマンド

コンパイルなしで実行できるコマンド

  1. コマンドプロンプトを開いて、ソースファイルのフォルダに移動
  2. runghc hello.hs

実行するまで遅い

ghciコマンド

GHCi

次の手順でソースファイルをロードし実行できる(Windows

  1. GHCiを起動
  2. :cd ソースファイルのフォルダ
  3. load hello.hs
  4. main

ちなみにGHCiからソースファイルをロードして実行してもGHCコンパイルした時のようなファイルは生成されないもよう → どこか知らないとこで生成されてる?

インタープリターだからそもそもコンパイルしない。 GHCインタプリターは違う実装がされているらしい。 細かいところで違う動きをするらしい。