第110回 素人くさいSICP読書会(at 秋葉原某所)

  • 会場提供ありがとうございました
  • 第1次ショック ACアダプタ間違えた
    • まあLet's noteだし電池持つだろ
  • 第2次ショック Let's noteの電池が切れてる
  • 第3次ショック 紙もノートも持ってない
  • 個人的に本日の読書会 糸冬 了
  • ほんとに帰りたくなった
  • 20分くらいSBのiPhoneの話とかSIMカードの話とかぐだぐだと
  • 気を取り直して4.1.7を音読
  • 自分が使えるツールは教室のホワイトボードだけ
  • ということで発表でもないのにひたすらホワイトボードにコードを書き写してた
  • 帰り際に某氏のSB株売買の話。突発的な事象に対応できないのはしょうがないよね。大きく儲けるとたいてい大きく損するからおk
  • ちなみに携帯電話も電池が切れてて家で充電してた
  • 会場に入れなくて電話かけてきた人がいないかどうか心配
  • 問題4.22
  • cond->ifと同様の処理をlet->combinationでやればいいはず
  • ということでホワイトボードに書く
  • 動かなかった人はmake-procedureを書き換えてたりtypoだったりが原因らしい。特に引っかけではなかったもよう
  • 問題4.23
  • 本文版(Eva版)とAlyssa版をホワイトボードに横に並べて書いて比べてみる
  • 最初は「二つずつ」と「一つずつ」の差かと思ったけど、そう単純な話ではなさそう
  • extが2個(つまりanalyze済みのprocが2個)の場合はどちらも
    (lambda (env) (proc1 env) (proc2 env))
    の形になる
  • procが3個のときはEva版は
    (lambda (env) ( (lambda (env) (proc1 env) (proc2 env)) env) (proc3 env))
    と奇妙な形に
  • 実行時の環境がうんぬんと言ってたのは自分の勘違いだった
  • 以下、家で考えたこと
  • そもそもAlyssa版はprocsを中に含むexecute-sequenceのクロージャを返すから、Eva版とは動作が違う
  • procが1個の場合
    • Eva版はproc1がそのまま返る
    • Alyssa版はenvを渡された時点でexecute-sequenceが動き、
      (lambda (env) (proc1 env))
      が返る
  • procが2個の場合
    • Eva版は
      (lambda (env) (proc1 env) (proc2 env))
      が返る
    • Alyssa版はexecute-sequenceが動き、結果的にEva版と同じものになる
  • procが3個の場合、Eva版の形の意味がよくわからない
  • ということで来週まで考えることにする

【追記】

  • 少し見えてきた。Alyssa版は(実装言語側の)lambdaのボディの数が任意なのに対し、Eva版は2個に固定されてる