Quoting not yet working properly, so symbols in the input
AST are evaluated when they should not be.
Example failing test:
(quasiquote (1 a 3))
The quasiquote function turns this into
(cons 1 (cons a (quote (3))))
rather than
(cons 1 (cons (quote a) (quote (3))))
* Added if and fn* handling in eval
* New Env constructor env_new_bind
which takes a list of binding symbols and expressions
* Macro print_str_mac to shorten raw string printing
* Functions implemented as a list, storing an address to call,
outer environment, bindings and body
* apply_fn handles user-defined functions. Calls env_new_bind,
evaluates the body of the function, and returns the result
Simple tests seem to work:
user> (def! f (fn* (a b) (+ a b)))
#<function>
user> (f 1 2)
3
* Definition of symbols with repetition of the name in .len
replaced by a macro "static" in macros.mac
* core_environment now uses a macro to add native functions,
since this involved a lot of code repetition.