"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