第94回 素人くさいSICP読書会(at コントロールプラス株式会社)

  • 会場提供&紅茶ありがとうございました
  • 社長様じきじきに紅茶を入れていただきました
  • というか最初、社長さんだって気付かなかった。美人でした
  • 問題3.82
  • defineの動作にわずらわされるのがイヤだったので例によってDrScheme
  • 宿題だったので前もってやって行った→ここ
  • 動作が式の順番に依存するかどうかでちょっとした議論に
  • defineが順番依存なのはまあいいと
  • defineの代わりにletrecで書いてる人は順番関係ないんじゃね?ということだったけど、やっぱり順番依存でした
  • みんなletrecを勘違いしてたっぽい
    • 主な用途は再帰関数を定義すること
    • 変数が全部初期化されるまでは使えない、というのはletrecを使ってる人なら常識らしい
    • SICP的にはletrecはまだ出てきてないし
  • ↓ここから個人の考察
  • R5RS見ると、未定義の変数はとりあえずというシンボルに定義されるみたい
  • ということで確認
(letrec ((a b)
         (b 1))
  a)
;; => #<undefined>
  • エラーじゃなくてふつーに返ってきます
  • letrecでは未定義の変数も実体として存在するけど、評価するとというシンボルになるので、その値を使おうとしておかしくなった、ということらしい
  • 平田さんによる問題3.79の検算

  • 問題3.81
  • 例によって日本語の意味がわからない。平田さんに解読してもらった
  • 指令の並んだストリームを渡して、それに従ったストリームを返す手続きを書け、ということでした
  • この問題からGaucheに復帰
  • めんどくさいんで「generate以外なら『resetが渡す数字』とみなす」という手抜き実装でちゃちゃっと書いたら、いい加減だとブーイング
  • あとできれいに清書するよ
  • 来週は問題3.81と問題3.82を済ませて3章フィニッシュ!の予定
  • 再来週からいよいよ4章の予定