第 13 课作业
第 13 课逻辑编程作业:SICP 练习及专家挑战题。
对于所有涉及编写查询或规则的问题,请测试你的解答。
要运行查询系统并加载示例数据:
> (load "~cs61as/lib/query.scm")
> (initialize-data-base microshaft-data-base)
> (query-driver-loop)
现在你已经进入了查询系统的解释器。
要添加一条断言:
(assert! (foo bar))
要添加一条规则:
(assert! (rule (foo) (bar)))
其他任何内容都是查询。
练习 1
Abelson 和 Sussman,练习 4.56、4.57、4.58 和 4.65。
练习 2:专家挑战
提示
想做就做。不计分。
本节前面我们描述了允许单向推理出 reverse 关系的规则,即,
;;; Query input:
(forward-reverse (a b c) ?what)
;;; Query results:
(FORWARD-REVERSE (A B C) (C B A))
;;; Query input:
(forward-reverse ?what (a b c))
;;; Query results:
……无限循环
或
;;; Query input:
(backward-reverse ?what (a b c))
;;; Query results:
(BACKWARD-REVERSE (C B A) (A B C))
;;; Query input:
(backward-reverse (a b c) ?what)
;;; Query results:
……无限循环
定义规则,允许双向推理出 reverse 关系,产生下面的对话:
;;; Query input:
(reverse ?what (a b c))
;;; Query results:
(REVERSE (C B A) (A B C))
;;; Query input:
(reverse (a b c) ?what)
;;; Query results:
(REVERSE (A B C) (C B A))
提交作业!
相关说明请参见这份指南。它涵盖了基本终端命令和作业提交。
提交时遇到任何问题,随时请教助教!