第110回 素人くさいSICP読書会(at 秋葉原某所)
- 会場提供ありがとうございました
- 第1次ショック ACアダプタ間違えた
- まあLet's noteだし電池持つだろ
- 第2次ショック Let's noteの電池が切れてる
- サスペンドしたままほっといたらしい
- 第3次ショック 紙もノートも持ってない
- 気を取り直して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版と同じものになる
- Eva版は
- procが3個の場合、Eva版の形の意味がよくわからない
- ということで来週まで考えることにする
【追記】
- 少し見えてきた。Alyssa版は(実装言語側の)lambdaのボディの数が任意なのに対し、Eva版は2個に固定されてる