第169回 素人くさいSICP読書会(at 三田某所)

  • 会場提供ありがとうございました
  • 参加者4人
  • 雑談ばっかりでした
  • 例のイベントまたあるよという話
  • 有名なLisperって誰?
  • 名前が出たのは竹内先生、萩谷先生、shiroさん、黒田さん、藤田さん
  • あと湯淺先生
  • 和田先生を忘れてた><
  • RMSってLisper? → そりゃそうだろ
  • GNU Hurdの話に
  • Hurdは動かすだけで大変
  • AT互換機でMac OS Xを動かす話
  • 問題5.12の文章の意味がわからない
  • 問題5.11 b.
  • 「pushとpopを2回ずつ派」と「レジスタ名とデータをconsしてpush派」の二つに分かれた。自分は前者であとの人は後者
  • 前者はコードがすっきりして後者はロジックがすっきりするという感じか
  • 自分の解答↓
(define (make-save inst machine stack pc)
  (let* ((reg-name (stack-inst-reg-name inst))
         (reg (get-register machine reg-name)))
    (lambda ()
      (push stack (get-contents reg))
      (push stack reg-name)
      (advance-pc pc))))

(define (make-restore inst machine stack pc)
  (let* ((reg-name (stack-inst-reg-name inst))
         (reg (get-register machine reg-name)))
    (lambda ()
      (if (eq? reg-name (pop stack))
          (begin
            (set-contents! reg (pop stack))
            (advance-pc pc))
          (error "Register name mismatch -- RESTORE" inst)))))
  • 問題5.11 c.
  • 時間切れなのでhisaさんにヒントだけもらった
  • make-new-machineのスタックの構造を変える
  • スタックの代わりにレジスタ名を引数に取る手続きを返すようにする