This is the mail archive of the
guile@sourceware.cygnus.com
mailing list for the Guile project.
Re: GOOPS question (bug?)
Mikael Djurfeldt <mdj@mdj.nada.kth.se> writes:
> Nicolas Neuss <Nicolas.Neuss@IWR.Uni-Heidelberg.De> writes:
> > guile> (is-a? 1234567890 <number>)
> > #f
> > guile>
> >
> > Is this a bug? Probably it will vanish if rationals are implemented
> > via GOOPS... But is there a workaround for now?
> >
> > I'm using guile-1.3.5/goops-0.1.6.
>
> The numerical types have been reorganized in guile-1.3.5. You need to
> use GOOPS from CVS.
>
> I'll try to make a new release soon after the Guile-1.4 release.
I have tried now the CVS goops version together with guile-1.3.5.
Indeed, the recognition of longints as numbers works. But other
problems have shown up:
* 1. In contrast to the earlier version, not error is signaled when
overloading e.g. + without defining it as a generic function
first. Nevertheless, it does not work:
----------------------------------------------------------------
guile> (use-modules (oop goops))
guile> (define-method + ((x <number>) (y <number>))
(* x y)) ; only purpose is testing
guile> (+ 2 3)
5
guile>
It works in the following way:
guile> (define \+ +)
guile> (define-generic +)
guile> (define-method + ((x <number>) (y <number>))
(* x y))
guile> (+ 2 3)
6
guile>
----------------------------------------------------------------
* 2. < and > behave different in this respect. Why?
----------------------------------------------------------------
guile> (use-modules (oop goops))
guile> (define-method < () #t)
guile> (define-method > () #t)
0* (define-method > () #t)
1 (begin (if # #) (add-method! > #))
standard input:5:1: In expression (begin (if # #) (add-method! > #)):
standard input:5:1: #<primitive-procedure >> is not a valid generic function
Backtrace:
ABORT: (goops-error)
guile>
----------------------------------------------------------------
* 3. GOOPS becomes very slow when generating more generic functions
or methods, e.g.
(use-modules (oop goops))
(define-generic aa)
(define-generic ab)
(define-generic ac)
(define-generic ad)
(define-generic ae)
(define-generic af)
(define-generic ah)
(define-generic ai)
(define-generic aj)
(define-generic ak)
(define-generic al)
(define-generic am)
(define-generic an)
(define-generic ao)
(define-generic ap)
(define-generic aq)
(define-generic ar)
(define-generic as)
(define-generic at)
(define-generic au)
(define-generic av)
(define-generic aw)
(define-generic ax)
(define-generic ay)
(define-generic az)
(define-generic ba)
(define-generic bb)
(define-generic bc)
(define-generic bd)
(define-generic be)
(define-generic bf)
(define-generic bh)
(define-generic bi)
(define-generic bj)
(define-generic bk)
(define-generic bl)
(define-generic bm)
(define-generic bn)
(define-generic bo)
(define-generic bp)
(define-generic bq)
(define-generic br)
(define-generic bs)
(define-generic bt)
(define-generic bu)
(define-generic bv)
(define-generic bw)
(define-generic bx)
(define-generic by)
(define-generic bz)
Is there a flag which switches between C and Scheme for the OO
stuff?
* 4. A question: I had in mind that Neil Jerram was documenting the
MOP. Is this available? It seems not to be in the CVS source.
Yours, Nicolas.