On Jun 12, 2006, at 18:06, Christian Neukirchen wrote:

> it's important to recognize that Scheme has
> true first-class functions (being a Lisp-1), whereas there is a
> fundamental difference between Blocks/Procs/lambdas and methods (being
> a Lisp-2).

This has slightly confused me, but I'll admit that it's been a while  
since I've dealt with this sort of thing, so jump in with corrections  
as required.

   - A language has first-class functions when a function can be  
assigned to variable, passed to or returned from another function,  
and so on.  In Ruby, a = lambda { |x| x + 1 } for example.

   - The distinction between Lisp-1 and Lisp-2 that the latter has a  
separate namespace for functions, in Ruby, for example, def a(x) x +  
1; end can exist alongside a = lambda { |x| x + 1 } (and there's a  
corresponding hoop to jump through to call the lambda).

What I don't understand is how it follows that being in a different  
namespace implies that Lisp-2 doesn't have true first-class  
functions.  The only reason I can think of is the circular one that  
"only Lisp-1 has true first-class functions", which gives it the  
distinct flavour of an age-old Lisp holy war (if that's the case,  
consider me uninterested).

matthew smillie.