静岡Developers勉強会 Haskell読書会に参加しました。
静岡にて初ITコミュニティ活動へ参加
本日、2010年1月16日(金)にshizuoka_developer_haskellに参加してきました。静岡に来てから初めてITコミュニティに参加することもあり、わくわくしながら会場へ5分前に到着し、席を確保。Ubuntuを入れている方もいたりと、流石、IT系のイベントとワクワクしていました!
参加メンバー
今回の参加者は13名。三島、浜松、と馴染みのある土地から来た方、東京という遠方からいらっしゃった方もいました。驚いたことに、今回は、16才の高校生も参加していました。自分でCentOSサーバー組んで、ドメインも取得しているとのこと。素晴らしい!*1
「Haskell書けます」って言いたい!
本物のプログラマはHaskellを使う | 日経 xTECH(クロステック)にもありますが、「本物のプログラマはHaskellを使う」そうです。「Haskell書けます!」って言えるようになるために勉強するんですね、分かります。というのは冗談で、あまり馴染みのない関数型言語について理解を深めて、今後の業務に活かすのが目的です。
講義の進行について
講義は下記の書籍を担当者がスライドを使って説明し、巻末の練習問題を解く形式で進められました。
- 作者: Graham Hutton,山本和彦
- 出版社/メーカー: オーム社
- 発売日: 2009/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 503回
- この商品を含むブログ (117件) を見る
講義メモとコメント
発表のスライドはまた別の手段で公開してくださると思うので、今日の講義で私が取ったメモとそれに対するコメントを残しておきます。
遅延評価とは、必要になった段階で計算することです。このため、Haskellでは、無限のリストも評価をしない限り計算可能なので無限のリストも扱うことができるます。
- 純粋型関数
- 純粋とは副作用がないこと。参照透過性のおかげで保守性が高い。
- 再代入(破壊的代入)は許されない
- ex. a = a + 1
- i.e. a = 1の後にa = 2 は不可*2
ちなみ、副作用とは次のように言い換えられるようです。
副作用(side effect)というのは、メッセージの表示や、変数への代入といった、状態が変化する作用のことを言うんだ。
http://www41.atwiki.jp/knenethaskell/pages/22.html
http://www.codelogy.org/archives/2007/07/haskell_1_1.htmlやその続編記事によると、HaskellにもIO制御という副作用があるが、それを見えなく(無視する)ように抽象化しているようです。*3
また、参照透過性とは、次のように定義されています。
http://ja.wikipedia.org/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%29
- 同じ条件を与えれば必ず同じ結果が得られる
- 他のいかなる機能の結果にも影響を与えない
Haskellでは、「関数が一度決まると値は一意に決まる」のがHaskellの特徴です。しかし、
- 変数はない?
- 局所的変数はある。
上記と矛盾するようですが、第6回 局所的な「状態」を利用するためのStateモナド | 日経 xTECH(クロステック)によると、局所的変数を実装するためにモナドを使っているそうです。*4
- SQLも問い合わせ言語
SQLが分かると、他の問合せ言語が分かります。素晴らしい。
- 関数ごとに並列演算ができる(i.e. マルチCPUを積んでいる現在の計算機のトレンドに合っている。)
- 今後は並列化プログラミングが重要(cf. CPUの並列化)
- Map
- 与えられたリストを別のリストに変換。入力はリスト。出力もリスト。
- Reduce関数
- 入力は関数、値、リスト。出力は値。
並列演算が出来るのもHaskellの特徴だそうです。
- Tac関数(たらい回し関数)を書くことができる。
Haskellは相当速いらしいです。(cf. 404 Blog Not Found:たらいを回すならHaskell)
- length関数
- リストの要素数を返す関数
例えば、「リストの中身が0で割っていてエラーを吐く」場合、リストの長さを計算する際、javaの場合は中のリストを計算しエラーを出力するが、Haskellではリストの中身は遅延評価なので、要素数は計算してくれます。
「引数」「戻り値」「関数」の型を決めましょう。意図通りの動作をしてくれるはずです。
「何をさせるか」に注目しているのがHaskell。再起再帰させることが本質ならHakell。
- Dr.Erik Meijer
- Microsoftのコンピュータサイエンティスト
C9 Lectures | Tags | Channel 9でHaskellの講義の映像を公開しています。
- !
- エクスクラメーションマーク
- !!
- ダブルエクスクラメーションマーク
- dx(笑)
確かに、数学系の人がいたら、どつかれましたね。
- :edit filename
- filenameを標準エディタで編集する。
- :reload
- 現在のファイルを再読み込み
- :type expr
- expr の型を表示する
editで編集してreloadするやり方もありですね。
- リストの要素は全て同じ型でないとダメ
うっす。
xsがリストを意味するとわからなくて、最初は手間取りました。
- 演習問題1
- 問1
- 計算順序を考えるという問題。問題文の意味がわからん。
- 問2
- 証明問題。
- 問3
- Haskellのコードを書きましょう。
- 問4
できてないよできたよ- 問5
できてないよできたよ- 演習問題2
- 問1
- 問題なし
- 問2
- 階乗の定義が楽すぎる。素晴らしい。
- 問3
- 小文字、バッククオート、インデント
- 問4
- 出来たよ
- 問5
- できてないよ
訳者のwebサイトはプログラミングHaskell、著者のwebサイトはPage Redirection。解答も著者のwebサイトにあります。
- ~は「ニョロ」じゃなくて「チルダ」だよ。
ニョロって呼んでました(笑)気をつけます。
2次会について
初回なので大人しめに参加させてもらいました。ただ、皆さん、開発に関わっている方は、知識が豊富でした。私も負けていられないので、次回は語れる話題を用意しなければ!
今後について
予算が余っていれば課題図書を一冊予備として買う案も賛成です。新規参加者の方も来やすいですし、もし参加し忘れてしまった人も、遅れずについていけますしね。次回は2010年2月27日(土) 13:00に第3章をたかはしさんが発表です。乗り遅れずに頑張ります。
個人的には、「rubyによるwebアプリケーション開発したよ」「興味のある論文を実装したよ」なんかやりたいですが、これは、また別の機会に。