(rontolisp) docs

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 が組み込み手続きを解決できるのは、プログラムがその名前を どこかに綴っている場合 -- シンボルとして(クォートされたデータを含む)、または文字列の中に -- だけです。インタプリタはすべてを解決します。