&gt; and by necessity I have to disentangle the syntax of the language from the essence of the problem.<p>Doing that is why programmers prefer different languages, some language allow that to be easier than others do.  Some language allow a much more direct expression of the essence of the problem.<p>&gt; Adding macros and types just shifts how I encode the solution and in no way affects its abstract formulation.<p>Sure it does, it allows you express the abstract formulation more directly with less syntactic fluff. Ideally you wind up with a DSL that allows the problem to be solved as tersely yet readably as possible.