>>305
こんなのどうでしょ。

(define prim:+ +)
(define-method + ((num <number>) . args)
 (apply prim:+ num
     (map (lambda (x) (if (not (number? x))
               (string->number x)
               x))
       args)))

(define-method + ((str <string>) . args)
 (apply string-append str
     (map (lambda (x) (if (not (string? x))
               (number->string x)
               x))
       args)))