On 08/18/2010 09:52 AM, Matthias Felleisen wrote:

To make this available in Racket, you'd have to port his macros
from R6RS Scheme to Racket. I suspect that this would be a minor
task.

To anyone interested in porting the code to Racket: if the implementation looks kinda complex, it's partly because it does more than what is shown in the note. Going with the 'point' example, you also get an 'import-point' macro:

(define (distance-from-origin p)
  (import-point p)
  (sqrt (+ (* x x) (* y y))))

I.e. 'import-point' is like 'is-point' except that the fields are made available directly by their name.

There's also a way to define "methods" on the record. Let's say we want a 'neg' "method" which negates a point:

(define-record-type++ point
  (fields x y)
  (methods (neg point::neg)))

(define (point::neg p)
  (is-point p)
  (make-point (- p.x)
              (- p.y)))

 > (define p0 (make-point 10 20))
 > (is-point p0)
 > (p0.neg)
 #[point -10 -20]

To only implement what I show in the note (enough to get a 'define-record-type' which can provide things like 'is-point') should be alot less code.

I also experimented with a 'class' macro which builds on the above:

    http://gist.github.com/358639

The Racket veterans here could code all this up blindfolded. I'm sending this note in case some folks who are new to Racket are interested in experimenting with these ideas using my code. I didn't want them to be put off by the apparent complexity of it.

Ed
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to