My Daily Programming Life...

UCBerkeley CS61A Structure and Interpretation of Computer Programming Week2

だいぶ間が開いてしまったがSICPのWeek2。
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewiTunesUCollection?id=354818464#ls=1


教科書はオンラインで読むこともできる。
Structure and Interpretation of Computer Programs(SICP)http://www-mitpress.mit.edu/sicp/full-text/book/book.html

宿題や試験の内容はこちら。(宿題はCourse Reading Vol1にある。)
http://www-inst.eecs.berkeley.edu/~cs61a/fa10/

Lecture 3

主な内容
  • Function as Arguments( Higher-order function )
  • 関数の表記について( |-> という表記 )
  • lamda関数

関数の表記 |-> "maps to"についての説明はなんとなく聞くことになるけど、SICP 69ページのFixed-Pointの計算でsquare rootを計算するところでその理解が必要になる。(詳しくは後述)

lamda関数については、その歴史から話が始まる。アロンゾチャーチという人が、数学を関数を元に説明しようとしたところから始まっている、というような話だった。その後、AI研究者のジョンJohn McCarthyが、その考え方をLispに取り入れたとのこと。

Lecture 4

主な内容
  • First Class Data
  • Functionを返すFunction
  • letについて
基本的には高階関数の話

宿題

宿題はSICPのSection1.3を読むこと。Section1.2は飛ばしてあとでやるとのこと。読むに当たって知っておいた方が良さそうな英単語は
converge 収束する
differentiable 微分可能
derivative 導関数

いくつか注意が必要なところがあったので、メモ。
まず、SICP67-68は飛ばしてもよい。これは宿題の指示にも書いてある。

それから、その次の「Finding fixed points of function」というところ。まずFixed pointが何なのか分からないといまいちピンとこない。日本語では不動点 http://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9 となるらしい。これを一通り見ればどういうことなのか分かる。
それから、69ページのこのFixed pointの計算を使ってルートを解くところで、y |-> x/y とかなっていて、x,yの二つの変数が出てきてそれでどうして計算ができるのかと一瞬戸惑うのだが、よく見ればこれはyの関数であって、xは定数であることが分かる(このことに気づかないと理解するのに時間がかかる。)。
これは、まさに授業中に言っていたことだ。ax+bとかあったら、勝手にxを変数だと思い込むくせが悪いのだろう。正確な関数の記述はx |-> ax+b ということだ。

読み終わったら、指示にしたがってSICPの練習問題を解く。
教科書の練習問題は、基本的なことが主なので問題ない。
難しかったのはCourse ReaderのWeek2のExtra for expertsの問題。
これはできなかった。なんとなく考え方としては関数を返す関数を書いて・・・2重にすれば・・・などと考えたけどうまくいかなかった。決して方向性は間違っていなかったようなきがするけど。

これはY Combinatorというものらしい。詳しくは以下を参照
http://www.ece.uc.edu/~franco/C511/html/Scheme/ycomb.html

0 コメント:

Post a Comment

feedSubscribe to my feed