```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

```