[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
merge-generics
From: |
Thomas Wawrzinek |
Subject: |
merge-generics |
Date: |
Fri, 24 Aug 2001 09:29:32 +0200 (MEST) |
Hi!
Out of curiosity, I implemented Marius' proposal for a merge-generics
function. I'm sure this can be improved a lot, but maybe it's of interest to
some.
Regards,
Thomas
(define-module (a)
:use-module (oop goops))
(define-method (foo (o <vector>))
(display "VECTOR ") (display o) (newline))
(define-method (foo (o <string>))
(display "STRING ") (display o) (newline))
(export foo)
(define-module (b)
:use-module (oop goops))
(define-method (foo (o <list>))
(display "LIST ") (display o) (newline))
(export foo)
(define-module (merger)
:use-module (oop goops))
(define (merge-generics . args)
(let ((f (make-generic)))
(for-each (lambda (el)
(if (not (is-a? el <generic>))
(error "No generic function."))
(for-each (lambda (m)
(add-method! f m))
(generic-function-methods el)))
args)
f))
(export merge-generics)
(define-module (main)
:use-module (oop goops)
:use-module ((a) :select ((foo . a:foo)))
:use-module ((b) :select ((foo . b:foo)))
:use-module (merger))
(define foo (merge-generics a:foo b:foo))
(foo "1 2 3")
(foo #(1 2 3))
(foo '(1 2 3))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- merge-generics,
Thomas Wawrzinek <=