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

  • 会場提供ありがとうございました
  • 4人しかいないのでやる気ミニマム
  • 冒頭30分強が雑談に
  • 問題4.66
  • すっかり忘れてるので振り返り
  • 同じものが来たらはねる?
  • 問題4.67
  • 呼び出し履歴(質問とその質問にかかわる束縛)をすべて覚えておく
  • フレームの出力ストリームの中に混ぜておく?
  • クエリが走る前にチェック。同じ質問が来たらループとみなす
  • ここのandは真偽値を返すものではない。型と型をつなぐもの?
  • 問題4.68
  • 最初にschemeでreverseのコードを書いてそれを手で変換するという手順でやったらできた
  • 最初にできたのは、(reverse ?x (a b c))はOKだけど(reverse (a b c) ?x)はNG(無限ループ)のバージョン
(rule (reverse () ()))
(rule (reverse (?car . ?cdr) ?lst)
      (and (append-to-form ?tmp (?car) ?lst)
           (reverse ?cdr ?tmp)))
  • パターン変数の順番を入れ替えると(reverse (a b c) ?x)はOKで(reverse ?x (a b c))がNGのバージョンもできる
(rule (reverse () ()))
(rule (reverse ?lst (?car . ?cdr))
      (and (append-to-form ?tmp (?car) ?lst)
           (reverse ?tmp ?cdr)))
  • 両方向にできないかいろいろ考えたんだけど無理っぽい
  • 宣言的な書き方なのにパターン変数の順番に依存する処理系って超ださい
  • darcsとgit、どっちが古いの?、とか