LLで関数プログラミング

LLで関数プログラミング
@LLRing
青木 峰郎


日本Rubyの会
主著
– ふつうのLinuxプログラミング
– ふつうのHaskellプログラミング

関数型言語は勉強としてつかうだけ
住井 英二郎

東北大学
– 教員だけど気分は学生(試験のとき以外…)

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



無限リストも使えます
関数合成も使えます
今までどおりのテクニックを使いながら関
数型も使いたい人には便利