On 9/19/05, Jeremy Tregunna <jtregunna / blurgle.ca> wrote:
>
> On 19-Sep-05, at 7:15 PM, Gergely Kontra wrote:
>
> > Hi!
> >
> > 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'
> > ...
> > 2 is a prime number
> > 3 is a prime number
> > 4 equals 2 * 2
> > 5 is a prime number
> > 6 equals 2 * 3
> > 7 is a prime number
> > 8 equals 2 * 4
> > 9 equals 3 * 3
>
> Directly, yes; though hardly anybody writes code this way (at least
> I've never seen anybody write something like this, like how I'm about
> to give it to you). I'd see William Morgan's message for a better
> suggestion.
>

# I hate for loops

2.upto(10) do |n| # was => for n in (2..10) do
    2.upto(n) do |x| # was => for x in (2..n) do
>      if n % x == 0
>        puts "#{n} equals #{x} * #{n/x}"
>        break
>      else
>        puts "#{n} is a prime number"
>      end
>    end
> end
>

Though, I think this is broken... check the output.

> > Gergo
>
> --
> Jeremy Tregunna
> jtregunna / blurgle.ca
>
> "If debugging is the process of removing bugs, then programming must be
> the process of putting them in." --Dykstra
>

I still think lists are the nicest way to go about this. It could be
much improved but this is shorter:
(2..10).select {|n| (2..n).select {|x| n % x == 0 and n != x }.empty? }

Brian,