第 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))

提交作业!

相关说明请参见这份指南。它涵盖了基本终端命令和作业提交。

提交时遇到任何问题,随时请教助教!