I had to rethink how I was approaching namespaces in order to implement the (lambda) special form in kaslisp, but I now have an untested prototype of (lambda)!
one thing that I’m kinda proud of is that you can do stuff like this with special forms in kaslisp:
(set λ lambda)
(λ (x y) (+ x y))
(I haven’t created set or + yet but you get the idea I hope)
the “function” that is run in a special form can be treated like any other function: in fact it’s a datatype that I call a “special function” for lack of a better term. it’s literally just a function that automatically quotes its arguments and is allowed to do weird things with the interpreter if it wants
also, in kaslisp you can add an arbitrary number of as and ds to a function call like (caaaddddaaaaadddaaaddaar) lol. and what you will get will be another special function!
special functions get to play with the interpreter, as a treat
the reason why I’m proud of special forms being their own datatype (instead of essentially just being special cases for the interpreter) is because in Fennel you can’t do (reduce + list) because + is a special form, so you can’t (eval '+) but in kaslisp you can
the interpreter, spreading open its private values: oh~? would you like to do something with me~?