第1回 関数型言語勉強会 大阪に参加しました。
@s_kozake さん 関数型言語入門
CPUのマルチコア化
副作用が無い関数型は平行処理と相性がいい
これまで以上に並行処理が重要になる
内部DSLを作成しやすい(ホスト言語?)
関数型言語の特徴である、リスト内包表記/ラムダ/高階関数をHaskell,Scala,Javaでそれぞれの事例についての説明。
リスト内包表記はHaskellが格好いいと思った。
@kuchitama さん Clodure
ClojureはLISPのJVM実装
ClojureのビルドツールLeiningen
Clodure学習サイト 4Clojure
書籍「7つの言語 7つの世界」
最近、括弧が大好きなのでLISPもClojureもやってみたい。
@kitora_naoki さん 関数型って?
・第1級関数を扱えること
→第1級関数を第1級オブジェクトとして扱えること。
→第1級関数とはプログラミング実行時に生成され、関数自体を引数にしたり戻り値として使用することが出来る。
・参照透過性が常に保たれること=純粋関数型言語
→変数への破壊的代入をしない → 漸化式
→副作用を担当するのがモナド
@posaunehm(ぽざうね) さん 初心者がF#を触ってみた
F#はC#のLinqに似ている
VisualStudioはインテリセンスが優秀
写経をGithubにコミットする手法は勉強の成果が形に残るのでよさそう。
写経対象のライセンスによっては非公開にしておいたほうがいいかも。
@uskz さん プログラムを計算する話
数学的モデルの利点を利用する→問題が複雑すぎるときに数学モデル化すれば、定義の範囲を超えて複雑になることはない。
関数の代数として圏を使う。データ型に依存しない型判定
計算を使って関数を合成する例
Fokkingaの相互再帰定理?(よくわからない、ググる)
関数から2項関係に一般化することの利点
→関係から逆関係を利用できる、関係の合併も関係として扱える。
関係の代数はAllegoryと呼ばれる特殊な圏論を使う。
リチャード・バード氏の本を読むと良い
ナップサック問題,val,digitsの例は解りそうなので、自分でもやってみたい。
val,digitsは逆関係と評価できるのだろうか?
@its_out_of_tune さん 関数型脳になろう!(仮)
Javaで副作用なしのプログラミングをした話。
ループ・破壊的代入なしでもJavaでBrainF*ckが実装できる。
ラムダの説明。
@ikegami__ さん 速習・関数型言語
読んでみたい本がたくさんあった。
「プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)
」と「プログラミングの基礎 (Computer Science Library)
」をポチっ。
@quassia88 さん Inverse FizzBuzz を解いてみよう
Inverse FizzBuzzの問題日本語訳
http://d.hatena.ne.jp/matarillo/20120515/p1
解法のヒント
→FizzBuzzの並びは循環するので、循環するFizzBuzzのリストを作成する
→問題を分割して指定値より大きいFizzやBuzzを返す関数を作る。
注意事項:最短になっているか?解のない問題に対してくラッシュしないか。空リストに対しても解を返すか?長いFizzBuzz列に対しての回答できるか?
ソースはgitHubに上がる予定。
@kyon_mm さん OCamlの多相ヴァリアントの紹介
多相Valiantは型安全なEnumみたいなもの?
Ocamlの多相Valiantは3つある。固定、開いている、閉じている。
@syamino 代数的データ型をラムダ計算の中で表現する方法
代数的データとパターンマッチについて。ラムダ計算でパターンマッチする例。
→スコットエンコーディング・・・(Yコンビネータでググる)
→チャーチエンコーディング・・・haskellのfoldr
チャーチ数はチャーチエンコーディングされた自然数
パターンマッチをラムダでする2つの方法について。
後半よく解らなくなってしまった。
パターンマッチをラムダで書く場合2つの選択があることが解った。
それぞれにメリット・デメリットがあるとのことだが、foldrと同等の処理ならチャーチエンコーディングで良いのかもしれない。
@keita44_f4 スタートSML#!
SML#は日本生まれのML言語。CやSQL言語との連携
Cをインポートすれば何でも出来るじゃないか。
@irof さん
Haskellのテスト Cabal,HUnitについて
brew install ghc
brew install cabal-insall
brew install hspec
セッションは関数型言語やその周辺技術についての概念の説明が多かった。
私は実務で関数型言語を使っていないので、実装に寄った話になるともっと解らなかったかもしれない。
カリー化等を実装ベースで「こう書いたらこれができる」とあやふやに理解しているので、言語ごとに違う実装例をみると、理解が激しく揺らぐ。
懇親会でおすすめの本等を聞かせたいただいた。数学ガールは読んでみようと思う。
懇親会でお話を聞かせていただいた方々の中には、関数型言語や関数型言語のフレームワークを用いて業務を効率化したいという意識を持っている人が複数いらっしゃった。
私は仕事では職場環境に合わせて開発し、趣味として仕事で使わないような言語や環境を触るのが好きですが、この取り組み方だと「仕事で使えるレベルまで到達しよう」という意識は生まれにくいので、もっとハードルを上げて技術の習得に臨むべきかもしれないと感じました。