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