Scheme](https://github.com/petermichaux/bootstrap-scheme) (as described in
[this wonderful series of blog
posts](http://peter.michaux.ca/articles/scheme-from-scratch-introduction)) from
-C to forth, but also includes variadic compound function support, mark-sweep
-garbage collection, quasiquotation, and a basic (non-hygienic) macro
-system.
+C to forth, but also includes:
-In future, I plan to also implement a more complete numerical tower to bring it closer to
-[R5RS](http://www.schemers.org/Documents/Standards/R5RS/).
-
-The goal is for the interpreter to be complete enough to be used to complete
-the majority of the exercises found in [SICP](http://sarabander.github.io/sicp/).
+* variadic compound function support,
+* pre-evaluation syntactic analysis,
+* mark-sweep garbage collection,
+* quasiquotation,
+* a basic (non-hygienic) macro system and
+* first-class continuations via `call-with-current-continuation`.
Running the interpreter
=======================
-To run this Scheme interpreter, first open Julia from the src directory contained
-in this repository. If you've not done so already, install forth.jl using the
-following command:
+To run this Scheme interpreter, first open Julia (**version >=0.6**) from the src
+directory contained in this repository. If you've not done so already, install
+forth.jl using the following command:
julia> Pkg.clone("https://github.com/tgvaughan/forth.jl")
;; M-Eval input:
At this point you can start entering Scheme commands... but be prepared to wait
-a _long_ time for the result. For instance, the following example from SICP
-defines and demonstrates a recursive list append procedure:
+a while for each result. After all, when evaluating commands in the MCE you are
+running a program in a Scheme interpreter running inside another Scheme
+interpreter which is itself running on a Forth system that is implemented atop
+a virtual register machine running in the Julia numerical computing
+environment. **That's four levels of abstraction more than a native Julia
+program experiences**, so some delay is to be expected!
+
+For instance, the following example from SICP defines and demonstrates a
+recursive list append procedure:
(define (append x y)
(if (null? x)
;;; M-Eval value:
(a b c d e f)
-Be prepared to wait 20 min or more for the final result to be printed. (Given
-that at this point we have a program running in a Scheme interpreter running
-inside another Scheme interpreter which is itself running on a Forth system
-that is implemented in Julia, this should not be a surprise.)
+You may have to wait a minute or so for the final result to be printed.
License
=======