Thanks Mike
Digging deeper :
Intuitively, no space is needed for an active tail call because the
continuation that is used in the tail call has the same semantics
as the continuation passed to the procedure containing the call.
Although an improper implementation might use a new con-
tinuation in the call, a return to this new continuation would
be followed immediately by a return to the continuation passed
to the procedure. A properly tail-recursive implementation re-
turns to that continuation directly.
Proper tail recursion was one of the central ideas in Steele and
Sussman’s original version of Scheme. Their first Scheme in-
terpreter implemented both functions and actors. Control flow
was expressed using actors, which differed from functions in
that they passed their results on to another actor instead of
returning to a caller. In the terminology of this section, each
actor finished with a tail call to another actor.
Steele and Sussman later observed that in their interpreter the
code for dealing with actors was identical to that for functions
and thus there was no need to include both in the language.
A tail call is a procedure call that occurs in a tail con-
text. Tail contexts are defined inductively. Note that a tail
context is always determined with respect to a particular
lambda expression.
---
IMO the (do ) macro can be written, but only of the Scheme contains the quasiquote and the mechisms it is working together, this belongs the (pure) "syntax"
4.2.6. Quasiquotation
(quasiquote hqq templatei)
syntax`hqq templatei syntax
“Backquote” or “quasiquote” expressions are useful for
constructing a list or vector structure when most but not
all of the desired structure is known in advance. If no
commas appear within the hqq templatei, the result of
evaluating `hqq templatei is equivalent to the result of
evaluating ’hqq templatei. If a comma appears within
the hqq templatei, however, the expression following the
comma is evaluated (“unquoted”) and its result is inserted
into the structure instead of the comma and the expres-
sion. If a comma appears followed immediately by an at-
sign (@), then the following expression must evaluate to
a list; the opening and closing parentheses of the list are
then “stripped away” and the elements of the list are in-
serted in place of the comma at-sign expression sequence.
A comma at-sign should only appear within a list or vector
hqq templatei.
and this in combination with :
(let-syntax hbindingsi hbodyi)
syntax(in combination with syntax-rules .. I think John already gave the do - maco ; however this syntax is missing here .
best Rob