[plt-scheme] A matter of design
> On the core side we will have a huge issue... integer values defines
> basic operations on integers +, -, etc with attached contracts and puts
> this all in the functions hash-table. Then comes the matrix value and
> defines +, -, * on matrices but with different contracts. Now the user
> does (+ matrix matrix) or something... how is the core supposed to know
> which + it is talking about (not to mention the best way to keep this.
Hi Paulo,
This feels very similiar to the "generic operations" stuff in:
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html#%25_sec_2.5
'swindle' provides library support for these kinds of generic operations.
Here's a quick and dirty example:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(module test-generics mzscheme
(require (lib "clos.ss" "swindle"))
(defgeneric plus)
(defmethod plus ((x <number>) (y <number>))
(+ x y))
(defmethod plus ((x <string>) (y <string>))
(string-append x y))
(printf "~a~n" (plus 4 2))
(printf "~a~n" (plus "4" "2")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;