From: Michael Fellinger Date: 2007-11-28T21:53:24+09:00 Subject: Re: Ruby needs continuations... [1,2,3].zip([4,5,6]).each{|a,b| p a => b} also, ruby does have contiuations, check your facts (ri callcc) before trying to complain, otherwise you will just appear as yet another troll. ^ manveru On 11/28/07, Just Another Victim of the Ambient Morality wrote: > Warning: I don't really know what I'm talking about so if I make any > mistakes in terminology, please try to correct me... > > > I've been doing a lot of Python programming and I've discovered that > it's actually a very powerful language. The language, itself, lacks any > kind of elegance but it has all the power of Ruby and a little more > performance. It also has a richer set of libraries, although not in all > areas, surprisingly. > One thing that Ruby should take from Python are continuations. Python > is moving away from list creation and version 3.0 functions will return > Python iterators, implemented with continuations, instead of actual lists, > since they are not used nearly as much as you might think. > The reason why I say that Ruby needs continuations is because they are > more versatile than Ruby iterators. The reason why I say _that_ is because > you can make Ruby iterators with continuations but you can't make > continuations with Ruby iterators. This means that you can implement a > continuation iterator and Object class can automatically define a Ruby > iterator based on your continuation iterator. After all, Ruby iterators are > nice. I'm surprised by how annoyed I am that Python for loops don't return > a value... > One weakness of Ruby iterators that continuations don't have is parallel > iteration. If you have two containers that represent different aspects of > the same things, it's difficult to iterate over both of them in Ruby. In > Python, you can do this: > > > list1 = [1, 2, 3, 4] > list2 = ['a', 'b', 'c', 'd'] > > # Okay, Python is more wordy than I'd like > # I could have just used zip() but you rarely need the list! > for num, letter in itertools.izip(list1, list2): > # Do something with both numbers and letters > print num, letter > print > > > How would one do this in Ruby? You can use .each_with_index and index > the other list but that assumes that the other list is indexable, which only > happens to be true of arrays but is not true in general. I've thought about > implementing some Ruby equivalent of zip() (or preferably izip()) and > discovered that I can't do so without continuations. > ...Hence, my post. I'm actually at odds with Pythonic philosophy. The > idea that there should only be one way to do things is ludicrous and a > constant up hill battle. One thing that Python does right is that it's not > afraid to "steal" from other languages and that's the right attitude to > have. Adopt whatever is useful! > Python 3.0 looks like great language. I'm hoping that Ruby 2.0 will be > even better 'cause, frankly, Ruby is more fun to program in... > Thank you... > > > > >