On Mon, 22 Jan 2007 10:46:15 +0100 Andy Wingo <[EMAIL PROTECTED]> wrote:
> Have you tried generics? A couple minutes of tinkering didn't give me > the right incantation, but it should be something like: > > (use-modules (oop goops)) > (define apply (ensure-generic apply)) > (define-method (apply proc (x <vector>)) ...) Hi Andy Many thanks for that! It hadn't occurred to me. The stuff below does what I want with apply. Now I need to figure out how to get this version of apply into the top-level REPL. At the moment: guile> (define tvec (vector cos sin)) guile> (apply tvec '(3.1415)) #(-0.999999995707656 9.26535896609343e-5) guile> (tvec 3.1415) <unnamed port>:12:1: In expression (tvec 3.1415): <unnamed port>:12:1: Wrong type to apply: #(#<procedure cos (z)> #<procedure sin (z)>) ABORT: (misc-error) Type "(backtrace)" to get more information or "(debug)" to enter the debugger. guile> I have tried starting a new (top-repl) after defining apply but that doesn't work. Any ideas anyone? Cheers Ian ;; Here's the code (use-modules (oop goops)) (define apply (ensure-generic apply)) (define (vapp vec args) (list->vector (map (lambda (p) (apply p args)) (vector->list vec)))) (define-method (apply (vec <vector>) args) (vapp vec args)) ;; To test: (define tvec (vector cos sin)) (apply tvec '(3.1415)) _______________________________________________ Guile-user mailing list Guile-user@gnu.org http://lists.gnu.org/mailman/listinfo/guile-user