taketoncheir.log

Like the Decatoncheir by Poseidon Industrial, This blog is Yet Another Storage for My Long Term Memories.

Functional Programming Principles in Scala in 2013/Sep Week 1

Scala作者のOderskyさんが自ら解説するScalaのオンライン講義があります。

Functional Programming Principles in Scala (Coursera)

先週から始まったので、ざっと見たところをメモっておきます。
時間節約のためビデオは見てません。あしからず。

※とても大雑把なので、元の講義を参照して下さい!

Week 1 Functions & Evaluations

  • Scalaでの評価戦略
    • Scalaは基本的にはCall by Value (評価戦略についてはTaPLが詳しかった)
      • Call by Valueは引数から評価し、その後に関数の簡約
      • Call by Name は関数の簡約を先に行い、引数の評価が最後
      • そのほうがパフォーマンスが良い
      • 引数を評価してから簡約する
      • Call by Nameにしたいときは、引数の型指定に => をつける
        • def constOne(x: Int, y: => Int) = 1
        • 以下のコードはCall by Valueでloopが先に評価され、無限ループとなる
def loop: Int = loop
def count(x: Int, y: Int) = x
> count(1, loop) // 無限ループ!
  • defで宣言した変数にはCall by Name, valで宣言した変数にはCall by Valueで式が作られる
  • Scope
    • block内の変数宣言はblock内からのみ参照可能
    • blockの外はshadowで呼べる
    • 行末には暗黙的にセミコロンが入るので、複数行の式を表すには()で囲むかオペレータを行末にする
  • 末尾再帰
    • 末尾再帰であれば、簡約の最中に関数自身と同じ形が現れる。そのため、その関数のスタック領域を再利用できる。
    • 末尾再帰でなければ、式が多重に結合する形になりスタックを大きく消費する
    • Scalaでは末尾再帰でないと最適化されない
    • @tailrecアノテーションでチェックできる
感想

再帰の書き方あたりはすっ飛ばされてるんですね。
再帰の考え方や実装方法については、@kazu_yamamotoさんの再帰ドリルが参考になるかと。
使用言語はHaskellですが、書き方はほぼ同じなので難しくないと思います。

評価戦略まで突っ込んでいて、Excerciseも面白いし、この講義は当たりですね!
時間を見つけて続けていきたいと思います。


Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版


型システム入門 −プログラミング言語と型の理論−

型システム入門 −プログラミング言語と型の理論−

  • 作者: Benjamin C. Pierce,住井英二郎,遠藤侑介,酒井政裕,今井敬吾,黒木裕介,今井宜洋,才川隆文,今井健男
  • 出版社/メーカー: オーム社
  • 発売日: 2013/03/26
  • メディア: 単行本(ソフトカバー)
  • クリック: 68回
  • この商品を含むブログ (8件) を見る