Scheme from Scratch - Bootstrap v0.19 - Eval
eval form is a bit like
apply. They are both procedures with an unusual tail call requirements.
The second argument to
eval is an environment, so exposing
eval also requires exposing some environment-related procedures. All together I implemented the following procedures for this version:
- Returns the top-level environment of the current REPL session.
- Returns an empty environment with only syntactic keywords like
- Returns a new environment like the environment present when the REPL starts.
- Evaluates an expression in a given environment.
Sample REPL session:
$ ./scheme Welcome to Bootstrap Scheme. Use ctrl-c to exit. > (define env (environment)) ok > (eval '(define z 25) env) ok > (eval 'z env) 25
I used the same trick for
eval as I did for
apply yesterday. There is a dummy primitive procedure but the exposed Scheme
eval procedure lives inside the C
environment procedures required a bit of refactoring in the model initialization. At some point I may backport those changes to previous versions with environments as it is just good programming anyway.
It feels like we are on the home stretch. There isn't much remaining to complete the bootstrap interpreter and none of it is very difficult.
There is a v0.19 branch on github for this version.
Have something to write? Comment on this article.