[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 very basic (non-hygenic) macro
+garbage collection, quasiquotation, and a basic (non-hygienic) macro
system.
In future, I plan to also implement a more complete numerical tower to bring it closer to
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/).
+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:
+
+ julia> Pkg.clone("https://github.com/tgvaughan/forth.jl")
+
+Then, import and run the Forth system:
+
+ julia> import forth
+ julia> forth.run()
+ Welcome to forth.jl!
+
+Once Forth is running, execute the Scheme source and fire up the
+REPL using the following commands:
+
+ include scheme.4th ok
+ scheme repl
+ Welcome to scheme.forth.jl!
+ Use Ctrl-D to exit.
+
+ >
+
+At this point you can start entering Scheme commands. For example,
+
+ > (define (factorial n)
+ (if (= n 0)
+ 1
+ (* n (factorial (- n 1)))))
+ ; ok
+ > (factorial 5)
+ ; 120
+
+Metacircular Evaluator
+======================
+
+Of course, one of the things you can do in Scheme (or of course any programming
+language, this is the fundamental thing) is implement an interpreter for
+another programming language. The examples directory in this repository
+contains a verbatim copy of the source for the "metacircular" scheme interpreter
+from SICP. To load it, use the following command:
+
+ > (load "../examples/metacirc.scm")
+ ; ok
+
+Be prepared to wait a couple of minutes. When the interpreter finally loads, enter
+the following command to run it:
+
+ > (driver-loop)
+
+You'll then be greeted by the following prompt:
+
+ ;; M-Eval input:
+
+At this point you can start entering Scheme commands... but be prepared to wait
+a while for the 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
+the Julia numerical computing environment. **That's three 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)
+ y
+ (cons (car x)
+ (append (cdr x) y))))
+
+ ;;; M-Eval value:
+ ok
+
+ ;;; M-Eval input:
+ (append '(a b c) '(d e f))
+
+ ;;; M-Eval value:
+ (a b c d e f)
+
+You may have to wait a minute or so for the final result to be printed.
+
+License
+=======
+
This software is free (as in freedom) and is distributed under the terms
of version 3 of the GNU General Public License. A copy of this license
is included in this repository in the file COPYING.