読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

関数型言語勉強会 大阪に行ってLTとかしてきました #fpstudy

関数型言語勉強会 大阪にいってきましたよ!!


まぁ怖い怖いと言いまくってたし、実際怖かったのだけれど、関数型言語自体はこわくないよね。参照透過性とか、第一級関数とかはモダンなプログラミング言語はどんどん取り入れ始めらrているし。(特にC++C++11以降なら関数型プログラミングも普通にできるんじゃないのかな?)
まだ自分の中で消化しきれていない(とりあえずF#本読みきらなくては!)のだけれど、自分のプログラムの中にどんどん取り入れていきたい。特にDDDとの関連づけが個人的な興味(今の印象ではかなり相性が良いのではと思っている)。

メモを残している範囲でまとめ。

プログラミングを計算する

@uskzさんの話。最初は「プログラミング」は設計書にすぎない!的な話から始まっていたのですが、途中でいきなり手書きの数式が展開され始めるという超展開。こわいよ((((;゚Д゚))))ガクガクブルブル

とはいえ、自分の感じた範囲での印象は、


  • つぶやき

  • 純粋数学的な関数型の強みとして、理論で式を変形できる

  • まず単純なアルゴリズムで実装し、式変形によって、その効率のみを純粋にアップできる。副作用抜きに。


というのがポイントなのかなーっと。とか思って帰りに@uskzさんのBlogを見てたら、まさにそういう感じの記事があって。


関数プログラミングでは、宣言的に記述された関数の定義式が実行可能な仕様と呼べるほど分かりやすくなることがあります。しかしながらそのプログラムは現実の問題解決で用いるのに十分なほど高速ではないかもしれません。ところで参照透過性が保たれていると、プログラムを形成する式を、それと等しい値を持つ式と置き換えて行くことができます。そこで、まず関数型言語を用いて簡潔で明澄な問題の記述を行い、そこから、その関数型言語上で既に証明されている定理を用いて、式変形によって効率的な実装を導き出すと言う手法が考えられます。

当たらずとも遠からずな理解じゃん、僕。やったね。まぁ圏論とかホント全然わかってないけれど・・・

関数型言語入門

これはもうザクっとまとめ。良い入門だった。


  • 関数型言語とは?



  • 関数型プログラミングの必要条件


    • 第一級関数を扱えること


      • 関数を第一級オブジェクトを扱うことができる関数

      • 有るプログラミング言語において、生成、代入、演算、受け渡しといった記法操作を出来る対象

      • 例:高階関数





  • ラムダ計算


    • なぜラムダ計算

    • 引数に何を入れていいかが自明になる



  • 参照透過性が常に保たれること


    • 保たれてるのは純粋関数型言語

    • 文脈によらず式の値は変数や関数によって定まる

    • 同じ引数を渡せばいつでも同じ結果になる

    • ステートを持たない



  • どうやってプログラミングするの?


    • 副作用のないPGってCPU回しているだけでは?

    • 副作用を許容



    • 最代入は値を作り直し



  • 何が嬉しい?


    • ユニットテスト書きやすい

    • 並列処理に向く

    • 第一級関数

    • コードが簡潔に

    • 関数を共通化しやすい




自分のLTとか

怖いもの知らずにも喋ってきました。もっと読み込んでからなんだろうけど、個人的には今とてもしっくり来る言語です、F#。とりあえず、


  • VS使いには易しいよ!

  • Linq使いには優しいよ!

  • Rx使いには柔しいよ!
    ってことが伝わればそれでいいかと。