eval
(eval datum env) はデータを実行時に評価します。どのバックエンドでも動きます。環境指定子は
どれも唯一の大域環境です: (interaction-environment)、(scheme-report-environment 5)、
(environment '(scheme base) ...) -- その import 集合はライブラリに照らして検査されます --
および MIT Scheme の user-initial-environment と system-global-environment はすべて
これを指し、引数は省略できます(--scheme-standard r7rs では省略不可)。大域環境が持つのは、プログラムの変数(eval 自身が
定義したものを含む)、プログラムの手続き、組み込み手続きで、この順に探されます。eval の中の define はプログラムの
大域変数になり、後の eval からもプログラム自身からも(eval 経由で)見えます。
プログラムの変数への set! はそれに代入します。プログラムは eval が書いた値を読みます。
#t
(3628800 10000)
eval の中では、名前付き let、do、自分自身を呼ぶ手続きは一定のスタックで動きます。
それ以外の呼び出しはスタックを消費します。define-record-type、define-values、
let-values、import は eval の中では名前を挙げて拒否されます。
コンパイルされたプログラムの eval が組み込み手続きを解決できるのは、プログラムがその名前を
どこかに綴っている場合 -- シンボルとして(クォートされたデータを含む)、または文字列の中に --
だけです。インタプリタはすべてを解決します。