プログラミング再入門

プログラミングをもう一度ちゃんと勉強する読書ノート

SICP 4.1.5 Data as Programs

ノート

プログラムを電子回路の様に理解する事も可能だし、何だか分からないけど凄い機械と理解しても良いが、評価器は評価器が扱うデータ構造と評価されるプログラムを繋ぐものと捉えられる。
プログラミング言語のユーザーにプログラム内でその言語を評価する機能を提供されていると便利である。

Exercise 4.15

同じ問題が『Scheme手習い』の第9章に出て来た。

(try try)を呼ぶと、(halt? try try)が評価される。

  • 仮にこれが停止して#tを返した場合、『(try try)は停止する』事を意味するが、そうするとrun-foreverが呼ばれるので(try try)は停止せず、(halt try try)の結果は間違っている。
  • 仮にこれが停止して#fを返した場合、『(try try)はしない』事を意味するが、そうするとrun-foreverが呼ばれるので(try try)は'haltedを返して停止してしまうので、(halt try try)の結果は間違っている。

と言う事で全関数としてのhalt?を定義する事は不可能。可能な場合もあるかも知れないが少なくともtryに対してhalt?は機能しないので。