
On 19/04/2017, at 5:05 PM, MigMit
wrote: http://www.offcenterdesigns.net/wp-content/uploads/wp-checkout/images/i-foun...
I think the problem with macros in general is that their semantics is defined purely in terms of code they generate. Not in terms of what that code actually does. As for me, I want to think about the things I need to achieve, not about the code to write.
I find this a rather baffling comment. Let's take SRFI-8, for example, which defines the syntax (receive <variables> <expression> <body>) which the SRFI defines *semantically* (paraphrased): - the <expression> is evaluated - the values are bound to the <variables> - the expressions in the <body> are evaluated sequentially - the values of the last <body> expression are the values of the (receive ...) expression. The syntax is *implemented* thus: (define-syntax receive (syntax-rules () ((receive formals expression body ...) (call-with-values (lambda () expression) (lambda formals body ...))))) but the semantics is *defined* by the specification. The whole point of a macro such as this is for the user *NOT* to "think about the code to write". The code that gets generated is of no interest to the ordinary programmer whatsoever. (Reflecting on the subject of this thread, 'receive' is actually pretty close to >>= .)