┗【コラム】O-One参加レポートはじめまして。オブジェクト倶楽部の平田です。昨日(10月24日)、O-Oneというイベントに参加してきました。その参戦レポートを書かせていただきたいと思います。O-Oneとは技術者たちが集まって、特定のテーマに関してディベートをしようというイベント[*1]です。技術がテーマですが、くじ引きで肯定側、否定側を決めて、純粋にディベートを楽しむ企画です。僕がディベーターとして参戦しました。前日に与えられたテーマに対して、事前に戦略を立てて臨んだものの、結果は残念ながら1回戦負け。今回の大会で優勝された方に惨敗してしまいました。敗因は極度の緊張に加えて、日頃の仕事から売りにしている「誠実さ」が裏目に出てしまったことかなと考えています。モデレータ役の方からの誘導尋問に見事に引っかかり続けてしまいました。自分の気持ちを隠して「大人のエンジニア」として振舞うにはもう少し訓練が必要なようです。いえ、自分の本来の意見と反対の意見を通すために、いろいろと戦略を練って戦えたのは楽しい経験でした。皆さんも次回(開催時期未定)、ディベーターとして参戦されてみてはいかがでしょうか?え、僕ですか?結果にはとても不満なので、次回もぜひ参戦しようと思っています。http://o-one.arrow.jp/o-one/_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。┗【プログラミング】ゆるーいHaskell[6]西川です。会社に来る時間を以前より1時間ほど早くしました。起きができるようになり体調が良くなった気がします。気のせいかもしれませんが。今回はタプル(tuple)の紹介をします。タプルはいくつかの値をひとつにまとめる機能です。リストとは異なり、違った型を持つ値もひとつのタプルとして扱うことができます。いつものようにghciを起動しましょう。[Char])要素が2つのタプルを受け取って(+)する関数addを作ってみましょう。badd関数がNumクラスのインスタンスである要素を2つもつタプルを引数にとることが解ります。クラスやインスタンスについてはいずれお話します。いまのところは「Numクラスのインスタンスである」は「数字である」と読みかえてしまっても構いません。(1,"hoge")(エラーメッセージが表示されます)タプルの要素が2つの場合はうまくいきますが、タプルの要素が3つになったり、タプルの要素にStringが入ったりするとadd関数がうまく実行できません。要素が2つのタプルを1つ引数としてもつ関数は、要素が3つのタプルを引数としてとることができません。Haskellの型チェックの対象となるからです。それではタプルを使った関数をいくつか紹介します。■zip関数zip関数はリストを2つ受け取ってリストの要素の1つ1つをタプルにする関数です。タプルのリストを返しますが、リストの要素数はzip関数の2つの引数のうち要素数が少ないほうにアラインされます。今回紹介するのはタプルの要素を2つ持つzip関数ですが、タプルの要素を3つ持つzip3,4つ持つzip4という関数もあります。[][]■unzip関数unzip関数はzip関数の反対でタプルのリストを引数にとり、リストのタプルを返す関数です。zip関数と同じようにunzip3,unzip4などの関数もあります。[(1,2),(3,4),(5,6),(7,8)]([1,3,5,7],[2,4,6,8])■curry関数curry関数は引数2つからタプルを作成し、タプルを引数として持つ関数を適用します。さきほど作ったadd関数をそのまま使います。23curry関数を使うことで明示的にタプルを作らなくてもadd関数を実行することができました。curry関数も前回紹介した高階関数です。uncurry関数ももちろん高階関数です。(1,2)-1uncurry関数を使うことで明示的にタプルからデータを取り出したりせず、そのまま(-)関数を実行できました。curry関数やuncurry関数などの高階関数を使うと、データを取り出してhogehogeするなど余計な処理が必要なくなり、処理が簡潔で解りやすくなります。練習として名前をアルファベット順でソートしてインデックスをつけて文字列にする処理をzipやuncurryを使って書いてみましょう。names)["1:Akahoshi","2:Fujikawa","3:Hamanaka","4:Igawa","5:Kanemoto","6:Toritani","7:Yano"]簡単に解説します。names"でリストnamesをソートします。names)"で1からはじまる無限リストとソートした名前のリストとをzipします。zip関数ではリストの要素が短いほうにアラインされるので無限リストを使うことができます。showName"を適用します。showName"を1つのタプルに適用してみます。"Akahoshi")"1:Akahoshi"これが先ほど作ったタプルのリスト全てに適用されるので、以下のようになります。showName)[(1,"Akahoshi"),(2,"Fujikawa"),(3,"Hamanaka"),(4,"Igawa"),(5,"Kanemoto"),(6,"Toritani"),(7,"Yano")]["1:Akahoshi","2:Fujikawa","3:Hamanaka","4:Igawa","5:Kanemoto","6:Toritani","7:Yano"]ちょっと難しかったでしょうか。紹介したのでzipとuncurryを使って処理を書いてみました。今回は紹介しませんでしたが、実はzipWith関数を使った方がもっとすっきり処理を書けます。暇だったら挑戦してみましょう。次回はカリー化や関数合成のことをお話します。(西川)_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。┗【コラム】平鍋健児のちょっと息抜き[1]【福井の名産】へしこみなさん、「へしこ」ってご存知ですか?福井の名産で、サバの糠漬けです。焼いたものを、朝ごはんに乗っけるのが最高で、かなり塩辛いので、ひと片でごはん一杯食べられます。お酒のつまみにもグッド、さらに、お茶漬けの具にも最適という優れもの。へしこは、しょっぱさの加減が難しく、辛すぎても、薄味すぎても美味しくないんです。(なんだか、「現実的なオブジェクト指向開発」に似てますね。どこが?!)ちょうどよい漬かり具合のへしこやフレームワークに出会うと、幸せになれます。先週、とても美味しいへしこを頂いて、びっくりしたのですが、薄切りにして生でも行けるんです。サバ寿司の塩っ辛いバージョン、という感じ。みなさんも、福井に来たら、ぜひ「へしこ」をお試してください(^_^)。品にします、以下のアンケートに返答ください(平鍋)。_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「1ヶ月のお小遣いいくらですか?」のホントのところ。気が早い話ですが、これから年末に向かうにしたがってイベントもいっぱい。その他に、メーカーやショップのボーナス商戦に刺激されて新製品がほしくなってしまいますね。今週はお小遣いについてです。生活費を差し引いてあなたが1ヶ月間に好きなものに使えるお金はいくらぐらいですか?細かいことは気にせず、だいたいの金額でお答えくださいね。10,001〜20,000円。20,001〜30,000円。30,001〜50,000円。50,001〜70,000円。70,001〜100,000円。100,001〜それ以上。