Macro-expanded lisp works surprisingly well as an intermediate representation for some tasks.
Today, I was able to enumerate all the bound variables pretty straightforwardly, because elisp only has four ways of introducing bindings!
(let, let*, lambda and condition-case)
Related Posts
I'm trying to decide the best voice for PL documentation.
Passive: "`let` can be used with destructuring."
Reader focused: "You can use `let` with destructuring."
Describing the PL: "FooLang supports destructuring with `let`."
Anyone have opinions or best practices?
I really like pattern matching in Rust, but I find myself using it less and less.
`if let` and `let ... else` require substantially less indentation, and I often use them for Option values.
I don't miss this syntactic sugar in OCaml though. Maybe it's just because OCaml has a 2 space indent, unlike Rust's 4 space indent?
Claude asked me a question today: was I looking for an Emacs plugin (because I was talking about elisp) or a Rust program (because I have configured Rust preferences)?
I'm really impressed, it's rare to see LLMs ask follow-up questions.
(I wanted Emacs in this case.)