先週の土曜日に開催されました。
内容を書くのが遅くなってしまいました。
また、オンライン中継を行なう予定でしたが、ネットワーク不調のため急遽中止ということになり、オンライン参加予定だった方、のぞいてみる予定だった方、すみませんでした。
しかし、Google WaveとSkypeを使ったオンライン自習会が開催されたようです。すげー。
あと前回、「裸に見えるジェネレータ」について話が出てましたが、@aharisuさんがクローン(?)を作ってました(笑)前回9LISPの次の日には作ったんだとか。しかもandroidアプリにしてました(笑)@aharisuさんはいつもすごい。
概要
- 今後の進め方について
- 前々回、前回の復習
- 問題を解いてみる
- クロージャ
- C#とかJavaとか
- オンライン参加
1.今後の進め方について
- 現在は高階関数をやっている
- 次(継続)に進むか?それとも高階関数について深めるか?
- もっと例題を解いてみたり、現実的な問題を解いてみよう
- SICPの図形言語とかどうかな?
- 次回までに高階関数、クロージャ関連の練習問題を探してみる
2.前々回、前回の復習
- 前々回
- The Little Schemer の rember(remove member), rember-f(高階関数) insertL, insertR, insert-g(高階関数)
- 前回
- map, fold, for-each を自前で定義してみる
- fold, unfold とか
3.問題を解いてみる
- ループを使わずに配列を逆順に
- ループを使わずに1~10の総和を
- xにf, gを適用させるcompose
- xにn回fを適用するrepeated
1は最近、2は以前流行ってたので。3, 4はSICPの2章から。
関数合成、curry化、部分的なcurry化など。
コードは例えば以下のようなもの。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; repeated | |
(define (repeated f n) | |
(lambda (x) | |
(if (zero? n) | |
x | |
((repeated f (- n 1))(f x))))) | |
(define aaa (repeated (lambda (x) (* x x)) 3)) | |
(aaa 2) | |
(aaa 3) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; compose | |
(define compose | |
(lambda (f) | |
(lambda (g) | |
(lambda (x) | |
(f (g x)))))) | |
(define (compose f g) | |
(lambda (x) | |
(f (g x)))) | |
((compose (lambda (x) (* x x)) | |
(lambda (x) (+ x 1))) 1) | |
; これだと有難味ないね | |
(define (compose f g x) | |
(f (g x))) |
4.クロージャ
- レキシカルスコープ
- クロージャの簡単な例
- counter など
- C#のクロージャだとステップデバッグでわかりやすい
- C#のラムダ式
- クロージャで簡易OO的なもの
- クロージャって、newしたクラスのインスタンスに似てるよね
- クロージャがあればOOできるしOOがあればクロージャできる
- map, for-each, fold の例、動作イメージなど
高階関数やクロージャに馴染みのない参加者の方もいます。ホワイトボードにたくさんSchemeのコードを書きました。
5.C#とかJavaとか
- Javaのインナークラスでクロージャもどきできるよね
- C#のクロージャも結局はインナークラスだよ
- C#でクロージャ書いてdisasmしてILのぞいて見よう
- クロージャをステップデバッグしてみよう
VSのステップデバッグわかりやすい。
オンライン参加
カメラ、多人数用のマイク、プロジェクターなど準備はできていたもののネットワーク不調によりネットできず断念。
- 自習会が開かれた模様
- Google Wave + Skype + Twitter
ネットワーク不調は改善されたようなので、次回こそは中継できそうです。
ちょ、なんで女性の裸(笑) >オンライン自習会のまとめ
返信削除