Hi, I am preparing a presentation about Ruby, for the programming 
languages class I'm taking, and I have quite a few questions:

1. blocks: differences with Smalltalk. If you want to pass blocks in 
Smalltalk, it seems to need to be explicitly declared in the method 
definition, ie to implement a to:do: method, you'd have to do something 
like:

to: n do: code |index|
    ...

While in Ruby, you need to do
def upto(n)
     ...
     yield index

Does calling the yield statement create sort of an implicit parameter 
for the method?

2. blocks and closures
I am a bit confused about the term "closure" used in the pickaxe book. 
It seems to me that "closure" means that a block is a Proc object, and 
can retain the context of where it is defined. This looks like Proc is 
more or less equivalent to the Scheme "lambda"... is this correct? Why 
is this property called "closure"? Further, though blocks can be Procs, 
can methods also be Procs?

3. In the "Programming Ruby" DDJ article, Dave and Andy say that Ruby is 
a pure OO language, but they also say that *just about* everything in 
Ruby is an object. What are not objects in Ruby? Does Ruby having 
control structures that are not methods make it less pure an OO language?

4. Ruby has been applied in "AI and machine learning research" and as an 
"engine for exploratory mathematics." Can anyone point me out to 
references, URLs for these? Brief descriptions would be nice, too. :-)

Thanks for any help you can give me.