A message I sent several months ago recently made it to this mailing list.
By now, my message is incorrect. I wish to apologize for the confusion I
have caused.
There is an important difference between the 1985 Scheme standard (MIT AI
Memo 848) and the draft of the new 1986 Scheme standard (distributed at
the ACM Conference on Lisp and Functional Programming and expected to
appear in November SIGPLAN Notices). In the 1985 standard
(define (foo ...) ...)
was equivalent to
(define foo (rec foo (lambda (...) ...))).
In the 1986 standard (define (foo ...) ...) is equivalent to
(define foo (lambda (...) ...)).
As I understand it, the motivation for this change is that in the 1985
semantics, mutual recursion goes through the obvious binding of foo,
but self-recursion goes through the invisible (and therefore mysterious)
binding of foo created by the implicit rec. It's hard to explain why
self-recursion should behave differently from mutual recursion, so the
1986 semantics gets rid of the implicit rec and the mystery.
This change was inadvertently omitted from the list of changes that
appears in the draft distributed at the Lisp conference, so you have
to read the draft very carefully to spot it. By the way, the
(define ((foo ...) ...) ...) syntax was also dropped from the draft
as a simplifying measure.
Peace, Will