SETL, Ruby and list comprehensions

Posted by Jonas Elfström Fri, 09 Feb 2007 00:11:00 GMT

Someone mentioned SETL and I didn't even know what it was so I googled it. Ended up at http://en.wikipedia.org/wiki/SETL#Sample_code:

Print all prime numbers from 2 to N

  print({n in {2..N} | forall m in {2..n - 1} | n mod m > 0});

The notation is similar to list comprehension.

Interesting! In Ruby you could do that something like this:

N=42
2.upto(N) {|n| puts n if (2..n-1).all? {|m| n.modulo(m)>0} }

The SETL example at wikipedia actually iterates way too much.

N=42
puts 2
3.step(N,2) {|n| puts n if (2..n/3).all? {|m| n.modulo(m)>0} }

I realize this is not purist list comprehension, well actually it isn't lc at all. Ruby does not have lc in the same sense as Python and others, but you can do almost everything you can with lc with the fantastic collection of methods in Enumerable. If that isn't enough you could always expand Ruby with a more general support for list comprehension like described here.

Posted in Ruby | no comments

Comments

Comments are closed