###Overview
A mini-interpreter written in scheme which is able to interpret itself, and therefore could be extended in the future using boot-strap iteration.
###Files
interpreter.scm: main file, provides supporting syntaxes including: define, if, cond, let, let*, letrec, quote, apply, and, or.
library.scm: library, contains implementations of non-primitive functions including: caar, cadr, cdar, cddr, caadr, caddr, cdadr, cadddr, not, equal?, newline, map, assoc, append.
test.scm: sample input, containing some test functions including: test-define-func, test-let, test-let*, test-letrec, test-cond.
test-library.scm: sample input for library functions, containing a test function: test-library
###Enhance
Fixed a bug in user defined function bind, which may cause unexpected output when the number of formal parameters and actual parameters do not match.
###How to Run
Go to the directory of interpreter and type the following commands in scheme:
(load "interpreter.scm")
(repl)
(load "library.scm")
To use test.scm to test the interpreter:
(load "test.scm")
(test-define-func)
(test-let)
(test-let*)
(test-letrec)
(test-cond)
To use test-library.scm to test the library functions:
(load "test-library.scm")
(test-library)
To have the interpreter interpret itself:
(load "interpreter.scm")
(repl)
To exit the interpreter:
(exit)