LLで関数プログラミング @LLRing
青木 峰郎 日本Rubyの会 主著 ふつうのLinuxプログラミング ふつうのHaskellプログラミング 関数型言語は勉強としてつかうだけ
住井 英二郎 東北大学 ICFPプログラミングコンテスト MinCaml 日常のプログラムは全てOCaml 教員だけど気分は学生(試験のとき以外…) ICFPプログラミングコンテスト 外の人2回+中の人1回 MinCaml 日常のプログラムは全てOCaml
中村 正三郎 アンテナハウス所属 関数型の先にある形式仕様記述を宣伝したいために登場
久井 亨 クロネッカーズデルタ合同会社代表 関数型言語はよく知らない MEPHISTO 制約システムと無限ストリームをベースにした、アニメーション生成システム 入出力を含む動的なプログラムの動作を、宣言的な記述で表現できる 2005年度未踏ユースで採択
山下 伸夫 株式会社タイムインターメディア Haskell宣伝マン Monad嫌い スクリプトもHaskellで書く
今泉 貴史 千葉大学 総合メディア基盤センター 言語系の研究をしたことも… 昔やっていたのは属性文法型言語 最近はネットワーク系が多い 昔やっていたのは属性文法型言語 関数型言語は使うよりもプログラミングモデルとして興味を持っている
関数型言語 何があれば関数型言語? LISPとHaskellとMLは関数型言語 ほかにももちろんある かもね
関数型言語の特徴 高階関数 宣言的な記述 静的型付け 遅延評価
高階関数 関数を計算の対象とするもの 関数型言語には必須ではない コードのコピー・ペーストが不要になる 当然あるもの、無いと話にならない オブジェクト指向に近い概念? コードのコピー・ペーストが不要になる 当然あるもの、無いと話にならない Rubyにだってイテレ-タはある フレームワークに関数をはめ込んで機能を実現可能
静的型付け 型をチェックしてくれることが重要 型を書くのがプログラミングのひとつ 型推論が型は決めてくれる 型を書かなければいけないわけではない 型を考えることが全体設計となっている 型推論が型は決めてくれる 型なしの言語だと決めなければいけないことを先送りできる(?) 記述の上で型がないとDucktypeが楽にできる Javaで言うところのInterfaceみたいなもの
宣言的な記述 考えなければならないことが限られる 宣言的な記述をできるようにプログラミング言語を高めてきた 抽象度を高くしてきた 仕様記述言語、定理証明器との相性が良い 現実問題として… 副作用は要るでしょう 約束事を覚えておかなくても良い
副作用 副作用はMonadでごまかす(?) →Monadで副作用が表現できちゃった まじめに考えなければ良い 穢れた世界 穢れているからこそ生き延びる
遅延評価 遅延評価の場合は評価順序が決まらないので副作用との相性が悪い 遅延評価は理解するのが難しい 必要なときに使えればよい 遅延評価は理解するのが難しい 副作用を使いたいから難しいのだろう 関数型言語には遅延評価があった方が良いだろう 遅延評価がないものは考えられない 遅延評価があれば楽ができる
Haskell 頭を使いたくない人はどうぞ コンピュータの動きを考える必要はない 覚えることはすごく少ない 基本的な考え方に例外が少ない 頭を真っ白にできるのであればお勧め 日本語処理はいまひとつ Hugsではそれなりに使える パッケージシステムは作ろうとしているところ
Lisp(?) Clean Concurrent Clean GUIが充実しています マルチプラットフォームで動作しています O'z
Ruby でも、関数型言語を学ぶことは重要だと思う
Scheme LISP系一般に論理型もできるし、関数型もできる パラダイムを勉強するにもよいだろう
OCaml 現実的な折衷案 ライブラリが比較的充実している 関数型プログラミングができれば別に言語は何でもいいかも 命令型やオブジェクト指向に慣れている人にはお勧め ライブラリが比較的充実している パッケージシステムもある モジュールシステムはいい加減かも 関数型プログラミングができれば別に言語は何でもいいかも 日本語処理はどうなっているのか デフォルトは文字コードは考えていない GUIへの日本語出力は まだちょっと大変
C++ 最近は関数型言語と定義されているらしい LLではないけれど… 本が厚くて面倒くさい 覚えることはたくさんある
Python 無限リストも使えます 関数合成も使えます 今までどおりのテクニックを使いながら関数型も使いたい人には便利