2014年5月14日水曜日

Functional Programming Principles in Scala (Week 3)

Functional Programming Principles in Scala (Week 3: Data and Abstraction)

==== Lectures ====
Lecture 3.1 - Class Hierarchies
abstract classやsuper/sub classの説明。
binary treeを例にしているのでAssignmentに役たちそう。
今回もsubstitution(置き換え)を使ってメソッドの評価を説明していた。

Lecture 3.2 - How Classes Are Organized
package, scaladoc, trait, class hierarchy
import xxx.yyy.{aaa, bbb} で複数のクラスをimport出来る。
Any, AnyRef, AnyVal, Null, Nothing
if (true) 1 else false のtypeはAnyVal。1とfalseの共通の親クラスまで遡る。
?? traitもextendでもwithでも継承できるが、extendとwithをどうして分ける必要があるのか??

Lecture 3.3 - Polymorphism
type parameter: Cons Listを例に説明。
type erasure
scala, java, Haskell, ML, OCamlは実行時は型情報を保持していない。
C++ C# F#は実行時も型を保持している
polymorphism
subtyping: 継承によって実現する
generics: type parameterによって実現する。

==== Assignments ====
[Object-Oriented Sets]
?? abstraction classで実装すべきか、sub classで実装すべきかの問いがあるが??
?? 同じ内容のtweetが入力された場合の仕様は定義されている??
=> サポート外。
?? 同じ回数のretweetの場合のmostRetweetの仕様は実装依存?
=> 実装依存。どれを返しても問題はない。。
通常処理でexceptionを発生させるのは性能上良くない。別の方法にすべき。
accを使わなくても書けるが、使えば性能を上げられる。末尾再帰には拘らなくて良いみたい。
存在しないtweetをremoveした場合は元のTweetSetを返す。
内容の大小は.textのStringなので=,<,>が使える。

一回目の提出で7.09/10.00だった。。。
unit testで70/110。4つのテストでfailがあり理由はすべてtimeout。無限ループあり?
無限ループでは無さそう。実装したアルゴリズムの性能の問題。

Forums / Assignments / Week 3: Data and Abstraction objsets FAQ
に色々とヒントが書いてあった。性能に依存する所あり思ったより難しい。

2回目の提出で10/10獲得!!

==== Etc. ====
Lectureの途中でVideoに埋め込まれたQuizがあった。
Assignmentのソースのコメントにtypoが多過ぎる。。。
Lecture3.1のsubtitleが全然合っていなかった様な気がする。別物?
今回はlectureを1.25~1.75倍速で速見した。意味が分かったのか、元々知っていたかは?
Assignmentの一部の実装が決めきれずに時間が掛かってしまった。
あまり深く考えずにサクサク進めるべき。
Assignmentに関する議論はネタバレにならないようにdeadlineが過ぎてから行うべき?
性能が問題になるケースがあり、そこも考慮必要で思ったより難しい。

==== Log ====
2014/5/13 Lecture 3.1 Assignments 準備 00:40
2014/5/14 Lecture 3.2-3 00:50
2014/5/14 Assignments 03:00
2014/5/15 Assignments 03:30

0 件のコメント:

コメントを投稿