第103回 素人くさいSICP読書会(at 秋葉原某所)
- 会場提供ありがとうございました
- 参加3名。hisaさんとorkenさんと私。たぶん最少人数記録更新
- 会場を提供してくださっているささださんに「マックでやればいいじゃん」と言われました
- ><
- 問題4.11
- コンストラクタ、セレクタ、ミューテータだけを書き換えればいい
- add-binding-to-frame!で、set!で書き換えようとして外のframeが書き変わってなかった。だめだめ
- set-cdr!でつなぎ代えるためにダミーのcar部が必要なことをhisaさんに教えてもらった
- 問題4.12
- hisaさんに方針を教えてもらったのであとで書く
- scanを共通化。差分の部分を二つのlambdaとして引数で取るように書き換える
- 問題4.13は宿題に
- set!型でいこうというのがだいたいのコンセンサス
- 13日にあった継続フェスタの話題
- 自分は理解できないのがわかりきってたので行かなかった
- 「フェスタ」なのに学会みたいだったらしい
- ささださんだけがネタっぽくて浮いてたとか
- 「継続は有害」とか言ってみたらしい
- Rubyで継続を使っているライブラリはgeneratorくらい。外部イテレータ化。Javaのイテレータみたいに処理を中断したところから再開できるようになる
- Rubyのevalは凶悪
- Schemeのevalは引数で環境を取る。たいていの処理系では、環境の指定を省略すると、今の環境ではなく全く新しい環境を使う。そうしないと最適化が難しい
- 引数をリストで実装するのは効率が悪い。でもRuby 1.8までのブロック引数はリストで実装されている。Rubyでそんなにブロック引数をずらずら並べないでしょ、ということらしい
- フレームをたどっていくのはたいていリストで実装する。高速化の手段としては、フレームを融合しても問題ない場合は並べちゃうとかあるらしい
- R5RSによると、Schemeの構成要素はifとset!とlambdaしかない
- これらだけでconsを作れるか?
- ささださんがifを使った方法を思いつく
- 実は問題2.4にlambdaを使った方法が書いてあった
- lambda計算の話からコンビナトリ・ロジックの話に
- 名前を付けない流派がlambda、付ける流派がコンビネータ
- SとKとI
- 起源はlambda計算より古い
- lambda計算で説明するとわかりやすい
- どちらももとはヒルベルト
- RubyKaigiの金曜の話とか組み込み向けRubyの話とか
- 来週はdanさんちなんでみんな来てね><