Kay Schluehr wrote: > Mike Meyer wrote: > > >>Yes, but the function "sorted" is more useful than a list method >>"sorted" in a duck typing language. > > > I don't see what this has to do with "duck typing"? sorted() is simply > a generic function accepting different types. I'm not aware that > sorted() requires a specific interface of those types it accepts. > Just because you aren't aware of something doesn't stop it being true. The argument must be iterable, and there's a specific protocol for that. > >>The function sorted works on all iterators. I can do: >> Ah, so you *were* aware of it. >> >>>>>def t(n): >>>>> for i in range(n): >>>>> yield i >>>>>... >>>>>print sorted(t(5)) >> >>and have it work. >> >>If sorted were a method of a class - the it'd have to be implemented >>again for every class iterable class. Either that, or you'd have to >>create an abstract parent of all iterable classes to add it to - which >>seems more appropriate for a B&D language than Python. > > > Instead of extending a class hierarchy it might even be possible to > hook a trait into the class by means of a __traits__ attribute. > > http://fsl.cs.uiuc.edu/~mhills/presentations/TraitsPresentation.pdf > > Generators as well as lists and tuples would provide a sortable trait. > The sorted() function could remain available for convenience. > The advantage being ... ? Perhaps you have just discovered a really interesting hammer, and are seeing this problem as a nail? > >>And even if you do add the abstract class, how do you make my example >>work without explictly converting the iterator to a list type? > > > I don't know how sorted() is implemented? A naive implementation would > in fact be nothing else then: > > def sorted(iter): > l = list(iter) > l.sort() > return l > > Kay > That would indeed be a naïve implementation. The implementation is, of course, an implementation detail ;-) In this case it requires that sort() then provides all the magic - the need for magic doesn't go away!
regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list