upvote
I think also a lot of my objections could be worked around if one simply had a "math" macro that evaluates infix math notation as a DSL, similarly to how the CL "loop" macro does a DSL for iteration.

Perhaps this exists already somewhere?

reply
> exists already

The helloworld of macros lets you do `(infix 1 + 2)`:

    (defmacro infix [a op b]
      ~(,op ,a ,b))
A useful one with precedence letting you to `(infix 2 + 4 * 5)`:

    (defmacro infix  [& toks]
      (def prec {'+ 1 '- 1 '* 2 '/ 2 '% 2})
      (var pos 0)
      (defn climb [min-p]
        (var left (toks pos))
        (++ pos)
        (while (>= (get prec (get toks pos) -1) min-p) # nil/operand -> -1, stops the loop
          (def op (toks pos))
          (++ pos)
          (set left ~(,op ,left ,(climb (inc (prec op)))))) # inc => left-associative
        left)
      (climb 0))
But ultimately, APL notation is best: https://git.sr.ht/~subsetpark/jnj
reply
I definitely prefer s-exps over both xml and json myself too!

Interesting question. Much of the difficulty does stem from mentally translating back and forth between conventional notation and s-exps too, since you can’t really avoid the standard notation when reading and writing math and physics papers. And current-day math and physics notation has been optimized to some extent for the infix notation; perhaps one would have invented more expressive higher-order functions or macros to denote s-exp math if that was what everyone used for centuries.

reply
If you ever used an RPN calculator then this is very familiar
reply