開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: 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.1(超循環評価器)、4.1.5(プログラムとしてのデータ)、問題 4.15を解いてみる。
その他参考書籍
問題 4.15
問題の手続きhalts?があると仮定する。
引数を1つもつtry手続きは、その引数をpとするとき、式(p p)の評価がエラーメッセージで停止したり、永遠には知ったりせず値を返すようなら、永遠に走り続けるrun-forever手続きを評価する。そうでない場合は'haltedを返す。
ここで式(try try)の評価を考えてみる。
式(try try)が値を返す(tryはtryで停止する)と仮定し、式(try try)を評価すると(halts? try try)はtrueとなり、永遠に走り続ける手続きrun-foreverを評価することになる。これは、式(try try)が値を返す(tryはtryで停止する)という仮定と矛盾。
式(try try)が値を返さない、エラーメッセ意地で停止したり、永遠に走ったりする(tryはtryで停止しない)と仮定し、式(try try)を評価すると、(halts? try)はfalseとなり、'haltedが返される。これは、式(try try)が値を返さないという仮定と矛盾する。
よって、任意の手続きpとオブジェクトaに対して、pがaで停止するかどうか、正しく決める手続きhalts?を書くことは不可能である。
0 コメント:
コメントを投稿