"Eduardo Cavazos" wrote:
> Awhile back, I mentioned a 'define-record-type++' macro. I
> use something like this extensively in box2d-lite.

I  am working  to  something  like this,  too,  in my  devel
branch.  So far it allows me to do:

    (import (nausicaa) (checks))

    (define-class <fraction>
      (fields (mutable number))
      (virtual-fields (mutable numerator))
      (method (denominator o)
        (denominator (<fraction>-number o)))
      (method (product (o <fraction>) lambda)
        (set! o.numerator (* o.numerator lambda)))
      (method (the-list (o <fraction>) . ell)
        (cons o.numerator ell)))

    (define (<fraction>-numerator o)
      (numerator (<fraction>-number o)))

    (define (<fraction>-numerator-set! o v)
      (let ((n (<fraction>-number o)))
        (<fraction>-number-set! o (/ v (denominator n)))))

    (check
        (let ((o (make-<fraction> 2/3)))
          (with-fields ((o <fraction>))
            o.numerator))
      => 2)

    (check
        (let ((o (make-<fraction> 2/3)))
          (with-fields ((o <fraction>))
            (o.denominator)))
      => 3)

    (check
        (let ((o (make-<fraction> 2/3)))
          (with-fields ((o <fraction>))
            (o.product 10)
            o.numerator))
      => 20)

    (check
        (let ((o (make-<fraction> 2/3)))
          (with-fields ((o <fraction>))
            (o.the-list 10 11 12 13)))
      => '(2 10 11 12 13))

If someone wants to try it and cannibalise some code:

<http://github.com/downloads/marcomaggi/nausicaa/nausicaa-0.2d0-src.tar.bz2>

the stuff is in:

src/libraries/classes.sls
src/tests/test-classes.sps

and  the  texinfo  documentation  is  updated  in  the  node
"classes":

doc/nausicaa.texi

-- 
Marco Maggi

Reply via email to