Re: abstraction power

Yeap, I apologized to Jon for my misinterpretation of his claim. 

And: I used "newfangled Scheme facilities" because I believe that 
the old claims about faking data abstraction with procedures are
less than satisfactory from a practical and an expressivity kind 
of view. To be concrete: if you use define-struct (and units, 
which aren't necessary), you can signal reasonable error messages 
when someone misuses your counter (bad operation). With just lambda, 
you can't. More precisely, you cannot determine whether some lambda
represents a plain old closure or a counter -- unless you translate 
the _entire_ program into a closure-are-data-abstraction style (as
in cps). 

The generativity of define-struct is necessary because you need to 
be able to introduce as many classes of data as you wish. Because 
everything happens at run-time, you get run-time generativity. [This
aspect can be achieved with plain old lambda encoding in Scheme, because 
the report explicitly specifies that eq? works on procedures.]

Hope this helps -- Matthias