2014年5月7日水曜日

Functional Programming Principles in Scala (Week 2)


Week 2: Higher Order Functions

[Lecture 2.1 - Higher-Order Functions]
無名関数、関数リテラルは下記のsyntactic sugarと言うことも出来る。
{def f(x1 : T1; :::; xn : Tn) = E;f} //fは任意の名前

[Lecture 2.2 - Currying]
forward referenceの話が出てきた。
worksheetを使っていると上から順に定義されるので、使う順で記載する必要あり??

[Lecture 2.3 - Example: Finding Fixed Points]
Fixed Pointsと言うのはf(x) = xになるxの値の事。
ニュートン法を使って近似的に求めることが出来る。
平方根の求め方はこの代表例。
使用する関数によっては収束しないことがあるので注意必要。
高レベルの抽象化は何時もベストの選択とは限らないが、使うべき所に適切に使えるように身につけておくべき重要なテクニック。

[Lecture 2.4 - Scala Syntax Summary]
ENBF記法を使った言語定義のまとめ。
| 選択
[] オプション(0..1)
{} 繰り返し(0..n)
この辺の厳密な定義を覚えた方が()や{}がいるとかいらないとかで迷わなくて済みそう。

[Lecture 2.5 - Functions and Data]
分数(有理数)クラスの定義を例にとって、オブジェクト指向的な要素の説明。

[Lecture 2.6 - More Fun With Rationals]
data abstraction、データ抽象化を行うことでクラスの実装の影響をクライアントコードに与えないように出来る。
インタフェースと実装の分離。
第二コンストラクタ以降はdef this(..)で定義出来る。
コンストラクタ中からthis(...)で別のコンストラクタも呼べる。

[Lecture 2.7 - Evaluation and Operators]
クラスがnewされた時に行われるのはコンストラクタの引数の置き換え相当だけ。
メソッドの適用もnewしたインスタンスに更にメソッドの引数を置き換えて計算するたけ。
クラスでも関数でも実行(評価)は定義から実体に置き換えていくだけ。
** スライドの概要説明と具体例説明で引数の記載順序が食い違っている様に見えるが?
Scalaの+,*等のオペレータも基本的には通常メソッド名と同様の単なる識別子。
ただし、:で終わるものを右結合としたり、単項演算子はsyntatic sugerを使ったり、自然に見えるように細かい細工が施してある。

[Assignments - Functional Sets]
整数の集合(Set)を扱う関数を考える。
集合そのものを集合の要素か否かをテストする関数で表現する。

前のクラスの時のFAQが上がっていた。参考に出来そう。
https://class.coursera.org/progfun-004/forum/thread?thread_id=451

集合論の用語については下記で分かりそう。
http://en.wikipedia.org/wiki/Basic_set_operations#Basic_operations
http://en.wikipedia.org/wiki/Algebra_of_sets
union: 和集合
intersect: 積集合

liner recursion
t0 = 0
tn = tn-1 + d
となる漸化式の事。

コード量は少ないが何だかんだで2時間位かかった。
型推論やplace holder _を使えば関数リテラルも短く書ける。
ScalaTestのテストコードを自分で書いたのは良い経験になった。

IntelliJ idea
ScalaWorksheetのコードと実施結果の行が合わなくて、コード下の方が見えなくなっている。。。
何か対応方法はある?
一応ゴミ箱ボタンを押して結果を消せばコードは全部見えるようにはなる。

[その他]
Week2のvideoやassignmentが登録されているのに、メールも来ないしコースのAnnouncementsにも載っていなかった。
正式な配布日になるまではアナウンスしない方針??
それにしてはWeek1の時はアナウンスも早かったような気がするが。。。

先週同様に何かの使いまわしなので、説明の中の週の切れ目と今回のコースの週の切れ目は合っていない。

かなり早いペースで進んでいる。
Programming in Scala, First Editionを読んでいる部分なので既に分かっている内容。
ただ、読んでいない所まで進むと調べながらやらないと難しそうな感じがする。
もっと詳細なノート作成も必要になりそう。
また、今回はLecture部分は流しているだけで実際にWorksheetで実行していない。
これも知らない部分ならやらないと分かりそうにない。

[ログ]
2014/5/6 Lecture 2.1-2.5 1.5 hour
2014/5/6 Assignments 0.5 hour
2014/5/7 Lecture 2.6-2.7 1 hour
2014/5/7 Assignments 2 hour

0 件のコメント:

コメントを投稿