makopi23のブログ

makopi23が日々の生活で感じたことを気ままに綴るブログです。

「第2回 スタートHaskell2」に参加しました

2012/7/22(日) 「第2回 スタートHaskell2」に参加してきました。

PARTAKE
http://partake.in/events/e2f99b6b-a96f-4819-80d5-c5d61d2b427c

以下の書籍をテキストとした、セミナー形式と演習形式を組み合わせた勉強会なのです。

すごいHaskellたのしく学ぼう!すごいHaskellたのしく学ぼう!
(2012/05/23)
Miran Lipovača

商品詳細を見る


場所はこれまでと同じ IIJ 大会議室 (17階) です。
ウチからは総武線1本で行けます。30分弱くらいかな。
通勤定期が使えるので、乗車料金は一駅分で済むのがいいですね。

この勉強会は昨年メインで実施された勉強会「スタートHaskell」の続編です。こちらも私、参加してました。
んで、書籍を新たにして今年6月から再び始まったのが「スタートHaskell2」です。

スタートHaskellは、去年私が始めて社外の勉強会に参加した、記念すべき最初の勉強会でした。
この勉強会の特徴は、セミナー形式でテキストをじっくり学習できるのと、演習時間が設けられているので
実際に手を動かして演習問題に取り組むことで知識をより深められるトコです。
運営も複数人で手掛けられておりスムーズで、Haskellの有識者も多く、とても素晴らしい勉強会です。

なによりも、Haskellという関数型言語を気軽にしかも本格的に学べるトコがお気に入りです。
すごく刺激的ですね。普段の仕事だけだと、関数型言語なんて使う機会ないしなぁ。。。

前回の1章、2章に引き続き、今日は3章~5章が範囲でした。終盤には2名のLTもありました。
私も事前にテキスト読んで予習し、必要に応じてソースコードを写経して本日の勉強会に臨みました。


「3. 関数の構文」 発表者 @mizu_tama さん
20120722_chapter03.jpg
↑クリックすると資料の公開先に飛べます↑

@mizu_tama さんの自己紹介によると、Haskellは始めてまだ1ヶ月くらいとのこと。
しかもHaskellを始めた理由が、TwitterのTLにHaskellという単語がたくさん流れれて、流行っていると
思って自分も始めてみたとのことw
Haskell始めたばかりでいきなり発表を志願したところを見ると、かなりチャレンジ精神旺盛なエンジニアさんに
思います。この心意気は同じエンジニアとして尊敬しますし、若さと行動力が羨ましくも思います。

3章の発表で議題になった内容を、自分の覚書も兼ねて書いてみます。


■GHCでは、パターンマッチでどのパターンにも合致しない場合は、警告が出る。

■Haskellは、アンダースコアを付けた変数は、捨てるという意味を表す。
 この場合、この引数が使用されなくても警告は出ない。

■P.37の欄外注釈で紹介されているオプションで、-Wallは積極的に使うべし。-Werrorは好みに応じて使う。
 TLで右記のURLが参考に紹介されてました。http://www.kotha.net/ghcguide_ja/7.0.4/options-sanity.html

■otherwiseはTrueと定義されている。

■caseはなるべく使わない。

■letとwhereは似ているが、whereの方が宣言的になるので良い。
@kazu_yamamoto さんの紹介URL ↓
 http://www.haskell.org/haskellwiki/Declaration_vs._expression_style

■whereの中で定義するローカル関数には、一般に型宣言は付けない。ただし、付けることも可能。
 その場合は、whereで改行して次の行に関数の型宣言を書き、次の行に関数を書く。(P.45の3.3節最後)



「4. Hello再帰!」 発表者 @ko1kun さん
20120722_chapter04.jpg
↑クリックすると資料の公開先に飛べます↑

↑のスライドにはない自己紹介スライドが使用されていたのですが、コレが面白かったですね~
今日の勉強会に行ってくる時の、@ko1kunさんとその奥さんとの会話とかw
あと、有名どころっぽいWebドメイン取りまくってたり。。。
落語が好きなようで、かなりユーモア溢れるトークです。

7/25追記
自己紹介スライドが追加公開されました!
 コチラ

あと、かなり読書家なようで、いろんな本に書かれた再帰についてスライドで紹介されてたのが印象的です。
発表で取り上げてたフィボナッチ数列の再帰にしても、いろんな側面から自分なりに考察されてました。
こーゆう職人気質なエンジニアさん、私は好きですw

4章の発表でポイントになった覚書まとめ↓


■正格評価だと関数呼び出しでスタックを消費するが、遅延評価ではスタックを使わない。
 → スタックオーバーフローで差が出る

■世の中のHaskellに対する批判は大抵間違っているが、メモ化されるかどうかわからないという欠点はある。
 (慣れればメモ化されるかどうかは見えるようになる)
 → これは私の頭ではなんのことか理解できなかった。。。ので調べないと。ToDo!

■竹内関数、というのが発表で出てきた。。。
 → 私は知らなかった。けっこう有名らしいので、あとで調べておこう。。。ToDo!

■Haskellのコーディング時、インデントで縦位置を揃えるためにタブ使うべきか否かの議論アリ
 → 少なくとも、ソースのなかにタブが入っているのは良くない、とのこと。
   @kazu_yamamoto さんがツイートで紹介してくださった「Haskell Style Guide」↓
   https://github.com/tibbe/haskell-style-guide

■フィボナッチ数列の実装と実行速度について(@kazu_yamamoto さんがツイートで紹介)
 ・普通の速度のフィボナッチ数列
  https://gist.github.com/3158648
 ・素朴な fib が何故効率が悪いかの図
  http://www.sampou.org/cgi-bin/haskell.cgi?Memoise




「5. 高階関数」 発表者 @S1E11 さん
20120722_chapter05.jpg
↑クリックすると資料の公開先に飛べます↑

かなり直前まで発表スライドを作っていたが、間に合わなかったとのこと。。。
締切が近づいて焦る @S1E11 さんの悲哀に満ちたツイートが印象的でした。
でも、発表はうってかわって、かなり堂々と説明できていたところを見ると、入念に準備して学習してきた
感じが見て取れました。
一部、曖昧で説明をぼかしてたトコもあったけど。。。愛嬌で切り抜けてたしw
憎めないキャラ属性を持ってますねー。

5章の発表で議論になったとこを覚書で挙げます。


■リストからリストの生成をする場合は、foldr をつかう。

■ただし、逆順のリストを返すときはfoldl' を使う。

■数値にたたみ込むならfoldl' を使う。

■foldlは基本的に使わない。

■関数合成は一番右だけ $ にして、残りは . にすれば大体うまくいく。
 (外側から括弧をほぐしていく)
・参考:@kazu_yamamotoさんのブログ http://d.hatena.ne.jp/kazu-yamamoto/20100702/1278036842




3人の発表のあと、演習問題を解く時間が取られました。
・演習問題のページ: http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/

4章の演習で「偶数と奇数にわける」という問題があったのですが、コレ、時間内に歯が立たなかった。。。
問題自体は簡単なハズなんだけど、いざHaskellで解こうとすると、何をどう使えばいいのかすぐ出てこない。
やっぱ、関数型の解法に慣れるにはもっと勉強する必要があると痛感しました。

演習のあとはライトニングトーク(LT)の時間です。

LT1 「文芸的プログラミングについて」 発表者 @shokos さん
文芸的プログラミング from Shoko Sasaki


文芸的プログラミングは、スタートHaskellの初代の方の演習でけっこ使う機会あったので、イメージ湧きました。
これって、いわゆるTDD(テスト駆動開発)に該当するんでしょうね。
リファクタリングする場合には、特に文芸的プログラミングの要素は重要になってくると思います。
特に最近、仕事でアジャイルに関わることが多いので、尚更、文芸的プログラミングのありがたみを実感します。


LT2 「idのナゾ、constのヒミツ」 発表者 @kazu_yamamoto さん
20120722_LT2.jpg
↑クリックすると資料の公開先に飛べます↑

関数idは、先日参加したTaPL読書会にも1章か3章あたりで関数として出てきてたように思います。
今日のLTでも話になってるし、やっぱidって用途あるんだろなー。ちなみに発表では以下が紹介されました。

■idは、関数を畳み込むときの初期値に使用できる。
■idは、Bool をそのまま返す述語として使用できる。
■constは、引数を無視する関数として使用できる。

このあと、SKIコンビネータなるものが出てきました。
やべー、俺、全然ついていけてない。。。
みんな、このハイレベルでアカデミックな理論についていけてるんだろうか。。。

発表の @kazu_yamamoto さんは去年の「スタートHaskell」のテキストの原書を訳されてた方で、Haskellの知識は
ちょっと飛び抜けてますね。やっぱ、1つのこと徹底的に極めたエンジニアというのは強いですなー


今日も非常に有意義な時間を過ごさせていただきました。
発表者様と運営者様、ありがとうござました。次回も楽しみにしてます~

---
ハッシュタグ #start_haskell に関するツイートをゆかりんのーとで纏めてみました。
https://yukar.in/note/ckF3gL
スポンサーサイト

FC2Ad