On 04/04/2014 23:48, Alexander D. Knauth wrote:
(def-multi +)

(add-multi + '() (lambda () 0))
(add-multi + (listof number?) (lambda args (apply + args)))
(add-multi + (listof vector?) (lambda args (apply v+ args)))

(check-equal? (+ 1 2 3) 6)
(check-equal? (+ (vector 1 2 3)
                 (vector 2 3 4)
                 (vector 3 4 5))
              (vector 6 9 12))

I copied Common Lisp's model, but it's a good idea to add Racket-style contracts. It should be a matter of simply adding a matcher for this.

In the meantime, this will work:

(def-multi + multi-match-parms)

(add-multi + (list number?) (lambda args (apply rkt:+ args)))
(add-multi + (list vector?) (lambda args (apply v+ args)))
(add-multi + (list) (lambda () 0))

(check-equal? (+ 1 2 3) 6)
(check-equal? (+ (vector 1 2 3)
                 (vector 2 3 4))
              (vector 3 5 7))

Note that you forgot to prefix the original + with rkt: in your procedure, and that v+ only accepts 2 vectors.

Regards,
-Patrick
____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to