Re: possible to write a with-object prc/macro ?

From: Brian Denheyer <>
Date: Mon, 12 Jul 1999 15:05:06 -0700 (PDT)

>>>>> "Lars" == Lars Thomas Hansen <> writes:

  Lars> An old Pascal hand, eh?

No, just lazy ;-) But now I am intrigued. I'll have to go dig up a
Pascal book and find out where this is used.

  Lars> I think that if you're willing to make a smallish concession in the
  Lars> convenience of your syntax it should be straightforward, regardless of
  Lars> the underlying technology. It's easy, for example, to expand

And what would that concession be ? Something like :

(let ((z 22))
     (with-slots self (x y)
      (+ z (* x y))))


  Lars> (let ((z 22))
  Lars> (with-object self (x y)
  Lars> (+ z (* x y))))

  Lars> into the code above, that is, you name the slots you want. (Note,
  Lars> "easy" using a low-level macro system; the R5RS macro system can't
  Lars> splice identifiers.)

It _is_ easy to expand it when it contains hints, but I was hoping
that I could use it exactly as I originally wrote, i.e. there would be
no "hints" as to which slots were being accessed. If there are no
"hints" provided then the system must look at each identifier as it
encounters it and checks the active object to see if it is a
slot-name. I want this to be efficient too, so such checks should
only happen once at "compile time".

  Lars> I might even mutter that WITH-SLOTS is a better name for this construct
  Lars> than WITH-OBJECT.

I might mutter agreement :-)

BTW I did some looking around and found that Elk has a with-instance
form which supplies this functionality. It appears that it creates a
micro-environment, the instance environment, which is used for the
variable name lookup. Even though it is a macro, there is low-level
implementation support happening.

So here is a WAAWT (wild-*ss-attempt-without-testing) for the version
with "hints" :

(define-syntax with-slots
 (syntax-rules ()
   ((with-object obj (name ...) body1 ...)
    ((let ((name (slot-ref obj name)) ...)
          body1 ...)))))

Should work, right ? I have no idea how to do this with define-macro.
I like R5RS macros much more better. Somewhere around here i have the
stk and r5rs howto, i.e. old code I put together to use r5rs macros
with stk via slib.
Received on Tue Jul 13 1999 - 00:05:31 CEST

This archive was generated by hypermail 2.3.0 : Mon Jul 21 2014 - 19:38:59 CEST