(let ((a 1) (b 2))
(+ a b))
and harder to implement as a syntax rules macro :)Arc uses (let a 1 (+ a 2)), and lets is simply the logical progression of that.
The parens of let lets me easily distinguish the binding clauses, and lets me navigate it a lot easier in Emacs. The lets macro seems like the opposite of that. Every odd thing except the last element is an identifier and every even thing is that identifiers value.
What is gained from an extra layer of indirection?
(lets (a b) (list 1 2) c (+ a 3) (d e f) (some-func a b c) (* d e f))
It destructures automatically. The equivalent traditional macro might look like
(destructuring-bind* [[(a b) (list 1 2)] [c (+ a 3)] [(d e f) (some-func a b c)]] (* d e f))
which is unreadable. And yeah, normally it's indented properly and yada-yada, and people use editor plugins like paredit to make it not such a pain to type, but still. It adds up.