Hi -- On Tue, 20 Sep 2005, why the lucky stiff wrote: > William Morgan wrote: > >> Excerpts from Gergely Kontra's mail of 19 Sep 2005 (CDT): >> >>> Is there a similar construct to python's: >>> >>> >>>>>> for n in range(2, 10): >>>>>> >>> ... for x in range(2, n): >>> ... if n % x == 0: >>> ... print n, 'equals', x, '*', n/x >>> ... break >>> ... else: >>> ... # loop fell through without finding a factor >>> ... print n, 'is a prime number' >>> ... >> >> I don't think there's a direct idiom. I'd write this in Ruby as: >> >> (2...10).each do |n| >> fac = (2...n).find { |x| n % x == 0 } >> if fac >> puts "#{n} equals #{fac} * #{n / fac}" >> else >> puts "#{n} is a prime number" >> end >> end >> >> This is much clearer IMO. >> > Yeah, this isn't any clearer, but here's one that demonstrates the > possibilities in tying iterators and conditionals together. It works because > `break' causes the iterator to return nil. > > for n in 2...10 > puts "#{ n } is a prime number" if > for x in 2...n > if n % x == 0 > puts "#{ n } equals #{ x }*#{ n/x }" > break > end > end > end I know I'm wandering into the golf realm, rather than the clarity realm, but just for fun: for n in 2...10 puts "#{ n } is a prime number" if for x in 2...n break puts("#{ n } equals #{ x }*#{ n/x }") if n % x == 0 end end David -- David A. Black dblack / wobblini.net