開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- Scheme (プログラミング言語)
- MIT/GNU Scheme (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.4(論理型プログラミング)、4.4.3(論理型プログラミングは数学的論理か)、無限ループ、notに関する問題、問題 4.64を解いてみる。
その他参考書籍
問題 4.64
orの最初(supervisor (Bitdiddle Ben) ?boss)でBen Bitdiddleの直接のbossが誰かは分かる。ただ、Ben Bitdiddleの直接ではないボスを探索する時、orの次のandの最初(outranked-by ?middle-manager ?boss)でまた再帰的にoutranked-byのorを調べ、supervisorがbossな人全てがマッチし、その次のandでまた再帰的にoutranked-byのorを調べてsupervisorがbossの人全てがマッチし…となり, システムは無限ループに入る。middle-managerが未束縛なまあoutranked-byの1つ目の値として渡され続けるから無限ループに陥る。(その間にBen Bitdiddleのmiddle-managerでそのsupervisorがbossである人は全て印字されるので答えは印字される。)
元の規則の、
(and (supervisor ?staff-person ?middle-manager) (outranked-by-?middle-manager ?boss))
という順番なら、最初の(supervisor (Bitdiddle Ben) ?middle-manager)で、middle-managerにマッチするのがフィルタリングされるので、再帰的にその束縛された変数がoutranked-bayに渡されることになるので、無限ループに陥ることはない。
質問システムの実装はまだ(この先に実装もあるみたい)なので、実装できたら入出力結果を確認してみることに。
0 コメント:
コメントを投稿