finally fixed (in an inefficent way) recursive functions(more onthis
later) and added hash functions to lisp, also fixed apply

The issue with recursive function was this:
the function (fact (n acc) (if (< n 1) acc (fact (-- n) (* n acc))))
wouldn't work but (fact (acc n) (if (< n 1) acc (fact (* n acc) (-- n))))
would, because when recursively evaluating the function arguments I
would set the value of n in the current environment to (-- n) before
evaulting (* n acc) so things wouldn't work. so I fixed this by making a
copy of the arguments if I need to, I hope that I can make it more
efficent at some point

I had to fix sxhash because I didn't have the proper checks and such for
unsinged ints, so I added them.

I haven't fully implemented keyword args so I added a temporary function
make-hash-table-default to test some hash table functions which seem to
work so far.

with apply I realized I was being kinda stupid, because all I needed to
do was
(defun apply (fun &rest args) (eval (cons fun args)))
whereas before I was trying to call call_builtin which was kinda dumb