very cool implementation .. Something tells me that you didn't leave your python background behind.. :) Sunil.
On Sat, Dec 18, 2010 at 12:13 PM, Robert McIntyre <r...@mit.edu> wrote: > I think your work is a wonderful idea. I've been wanting to do this > myself for some time. > Thanks for actually doing it instead of just thinking about it. > > I have some humble thoughts/suggestions after reading your code; I'd > love to hear what you think about these points: > > 1. I think that auto-currying itself should be a higher order > function, which a macro then makes easier to use. > 2. Your def-curry-fn doesn't allow for easy embedding of metadata like > defn does; it could take advantage of defn from core for all that. > 3. Your def-curry-fn is similar in spirit to defn-memo from > clojure.contrib.def, but it's hard to combine it with that macro to > get both effects (both curried and memoized) I feel like this is > asking for a higher level of abstraction of "apply this unitary > higher-order transform to the following definition" than making a > defn-"higher-order-transform" macro for every transform those type of > functions are called decorators in some other languages. > > > I've sketched out a hopefully enhanced version of your code here: > https://gist.github.com/746185 > > While writing it, I found it convenient to extend the domain of > partial to include a single argument. > i.e. (= (partial f) f) > I think it might be a good enhancement of the partial function, as it > logically flows from the other airties. > Do people think it would be a good patch for core? > > Please tell me what you think of my code :) All criticisms are > welcome; I too am still learning. > > Sincerely, > --Robert McIntyre > > > On Fri, Dec 17, 2010 at 9:00 PM, Sunil S Nandihalli > <sunil.nandiha...@gmail.com> wrote: > > > > > > On Sat, Dec 18, 2010 at 7:21 AM, Sunil S Nandihalli > > <sunil.nandiha...@gmail.com> wrote: > >> > >> Hi Eric, > >> I do know about partial. But what I am saying is that the extra > function, > >> partial, is not necessary if the function was created with > >> def-curry-fn....... The function automatically returns a curried version > >> when called with fewer number of arguments than necessary.... like it > >> happens in haskell.. > >> thanks, > >> Sunil. > >> On Sat, Dec 18, 2010 at 3:02 AM, Eric Schulte <schulte.e...@gmail.com> > >> wrote: > >>> > >>> Hi Sunil, > >>> > >>> This is already possible using `partial' function in clojure core, > which > >>> also works for variable arity functions, e.g. > >>> > >>> (map (partial reduce +) [[1 2 3 4] [5 6 7 8]]) > >>> > >>> Best -- Eric > >>> > >>> Sunil S Nandihalli <sunil.nandiha...@gmail.com> writes: > >>> > >>> > Hello everybody, > >>> > I remember that the key reasoning for not supporting currying in > >>> > clojure > >>> > was to be able to have variable number of arg functions.. So, I just > >>> > thought > >>> > a bit and realized that it should be possible to do that for fixed > >>> > arity > >>> > functions .. and then wrote the following macro to define a > curry-able > >>> > fixed-number-of-argument-function > >>> > > >>> > https://gist.github.com/745654 > >>> > > > > > If the following was defined as > > (defn f [a b c d] > > (+ a b c d)) > >>> > >>> > (def-curry-fn f [a b c d] > >>> > (+ a b c d)) > >>> > > >>> > ((f 1) 2 3 4) => 10 > > > > the above s-expression using partial would become ... > > ((partial f 1) 2 3 4) => 10 > >>> > >>> > (((f 1 2) 3) 4) => 10 > > > > and ((partial (partial f 1 2) 3) 4) => 10 instead of (((f 1 2) 3) 4).. > > ((((f 1) 2) 3) 4) => 10 > > would become > > ((partial (partial (partial f 1) 2) 3) 4) => 10 ..... > > I know there is no real practical utility .. .. it was just something I > > wrote for fun.. and thought of sharing it ... > > Sunil. > >>> > >>> > > >>> > I just thought of sharing it with everybody. Would love to hear any > >>> > criticisms you may have. > >>> > > >>> > Thanks for reading, > >>> > 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<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