- 会場提供ありがとうございました
- 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)))
- 両方向にできないかいろいろ考えたんだけど無理っぽい
- 宣言的な書き方なのにパターン変数の順番に依存する処理系って超ださい