Hi, Am 21.10.2009 um 20:49 schrieb Shel:
> (defmulti area (fn [s m] [(:shape s) (:measure m)])) > (defmethod area[:rectangle :side] [s m] (* (:side m) (:side m))) > (defmethod area[:rectangle :sides] [s m] (* (:side1 m) (:side2 m))) > (derive ::square ::rectangle) > user=> (area {:shape :square} {:measure :side :side 2}) You have to use ::square and ::rectangle in the multimethod and the maps as you did in the derive. (defmulti area (fn [s m] [(:shape s) (:measure m)])) (defmethod area[::rectangle ::side] [s m] (* (:side m) (:side m))) (defmethod area[::rectangle ::sides] [s m] (* (:side1 m) (:side2 m))) (derive ::square ::rectangle) (area {:shape ::square} {:measure ::side :side 2}) This should do the trick. Sincerely Meikel
smime.p7s
Description: S/MIME cryptographic signature