On Jun 12, 2006, at 2:58 PM, Matthew Smillie wrote: > 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. > In a Lisp-2 you have to use special syntax (funcall, apply, #call) to call a function-value. I believe that was the distinction he was making.