第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さんちなんでみんな来てね><