I've been messing around with a language similar to xorvoid's forsp (https://xorvoid.com/forsp.html) and have come across some pretty cool stuff. I programmed the interpreter in a style very similar to CPS, and made the choice early on to have the program being run, the bindings, and the stack all be represented as cons cells within the language. All primitives in the language are simply functions of the form (prog, stack, binds) including the evaluator. This made implementing macros extremely easy, as I could just add a primitive that pushed the rest of the program to the stack and evaluated the list at the top of the stack, essentially swapping that list with the program. There's a ton of possibilities for this but one really cool one is that the quoting mechanism is implemented in the language itself.
@jeefle Joy, the original catlang, was oriented around "quotation". They were list the represented programs and could be menipulated as such. There was a fair bit of work and exploration done with Joy before von Thun passed away.

