It looks like the matchure <http://github.com/dcolthorp/matchure.git> does this kind of thing .. :) .. I guess somebody has already written a library to do what I wanted ...
On Mon, Sep 6, 2010 at 9:44 AM, Sunil S Nandihalli < sunil.nandiha...@gmail.com> wrote: > Hi Mark, > Let us say my dispatch function always returns a vector of 4 keywords. now > I want to write my methods in the following way.. > > (defmethod foo [_ :hello _ _ ] (str "I'm method 1")) > (defmethod foo [:world _ :us _ ] (str "I'm method 2")) > (defmethod foo [:city _ :us _ ] (str "I'm method 3")) > > and so on .. > > where '_' would match with anything ... > > but I just realized I could probably create a type of my own which > overrides the default '=' operator and make it behave like this .. do you > think that would work? > > Sunil. > > > > On Mon, Sep 6, 2010 at 9:36 AM, Mark Rathwell <mark.rathw...@gmail.com>wrote: > >> >> Sorry, little slow today. I'm not sure I'm completely following what you >> are trying to achieve. What do you want your method prototypes to look >> like? (e.g. modify the below to be what you are envisioning): >> >> (defmulti foo mclass) >> (defmethod foo "1" [s] (str "I'm method 1")) >> (defmethod foo "2" [s] (str "I'm method 2")) >> >> >> >> On Sun, Sep 5, 2010 at 11:58 PM, Sunil S Nandihalli < >> sunil.nandiha...@gmail.com> wrote: >> >>> Thanks Mark for you reply. Well I realized we can do that .. but I feel >>> it would be more expressive and readable if I could do the wild-card like >>> pattern matching when I am defining the method. >>> Sunil. >>> >>> >>> On Mon, Sep 6, 2010 at 9:25 AM, Mark Rathwell >>> <mark.rathw...@gmail.com>wrote: >>> >>>> >>>> You can add essentially one more level of indirection to your dispatch >>>> function logic and return an integer (or string or whatever) and match on >>>> that. So, with your example, when you want "method1" called, return 1 from >>>> the dispatch function, when you want "method2" return 2, you get the idea: >>>> >>>> (defmulti foo mclass) >>>> (defmethod foo 1 [s] (str "I'm method 1")) >>>> (defmethod foo 2 [s] (str "I'm method 2")) >>>> ... >>>> >>>> Is this what you are getting at? >>>> >>>> - Mark >>>> >>>> On Sun, Sep 5, 2010 at 8:50 PM, Sunil S Nandihalli < >>>> sunil.nandiha...@gmail.com> wrote: >>>> >>>>> Hello everybody, >>>>> It is awesome that we can specify our own dispatch functions and >>>>> corresponding values.. However, I feel we should also have control over >>>>> the >>>>> functions that is used to match the value of the dispatch function with >>>>> that >>>>> of the one specified in the defmethod. >>>>> For instance if my dispatch function is >>>>> >>>>> *(defn mclass [s]* >>>>> * (vec (reverse (loop [ret '() val s]* >>>>> * (if (coll? val)* >>>>> * (recur (cons (class val) ret) (first val))* >>>>> * (cons (class val) ret))))))* >>>>> >>>>> which basically tries to give a list of all the nested types of a >>>>> value. If a value is a collection, then all its elements are of same type. >>>>> so the above function when applied on .. let us say >>>>> >>>>> *(mclass #{'([1 2] [3 4])* >>>>> * '([5 6] [7 8])})* >>>>> >>>>> the return value would be >>>>> >>>>> *[clojure.lang.PersistentHashSet clojure.lang.PersistentList >>>>> clojure.lang.PersistentVector java.lang.Integer]* >>>>> >>>>> I would like to despatch based on some pattern of the return value of >>>>> my dispatch function *mclass* >>>>> * >>>>> * >>>>> For instance I would like to say something like when the second element >>>>> of return value of the dispatch function is *PersistentList call >>>>> method1 and call method2 when say the first element is PersistentList and >>>>> second element is say PersistentHashSet and call method3 for some >>>>> other pattern. Basically a general pattern matching .. So if only I could >>>>> have a way of changing how the equality for the purpose of dispatching >>>>> behaves .. it would be wonderful. We could either do this or we could >>>>> change >>>>> the dispatch-val to a dispatch-function with a single argument .. Or is >>>>> there a way to already do this?* >>>>> >>>>> In short is it possible to do a generic pattern-matching during >>>>> dispatch in multimethods? >>>>> >>>>> Sunil. >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To post to this group, send email to clojure@googlegroups.com >>>>> Note that posts from new members are moderated - please be patient with >>>>> your first post. >>>>> To unsubscribe from this group, send email to >>>>> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/clojure?hl=en >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clojure@googlegroups.com >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>> >>> >>> >> > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en