Hi Alex, > (If you can forgive a PicoLisp n00b shoving his face into the discussion...)
Sure! Welcome anytime :) > You actually have that the opposite way around. Tail call > elimination (tail recursion is just one special case of tail calls) > is a *semantic* rule that says that a function's activation no > longer has any influence on anything after its final call has been > engaged. Since it has no influence on anything, it is also I disagree. Thorsten's question was if it makes sense in an _interpreter_. And I think it does _not_ make sense, because you cannot do TCE while interpreting List structures. You have to do it in the compiler, as it requires some analysis of the code structure. In general, I think recursion is overvalued. It used to excite computer scientists in the dark ages of computing, causing awe and wonder when a subroutine was able to call itself. In a languge like PicoLisp, recursion is only necessary when you have recursive data structures (like trees), and those cases are typically not tail recursive. For most common cases you directly write a loop with 'do', 'loop', 'while', 'until', 'for' etc., which let you express more clearly what the code is supposed to do. > PicoLisp's dynamic scope rules mean that a function's activation can Please avoid the term "dynamic scope". There is no such thing in PicoLisp. PicoLisp has "dynamic binding". "Scope" is concerned about the _visibility_ of symbols. And normal (internal) symbols always have a global scope in PicoLisp. Transient symbols have a file-local scope, while external symbols have a DB-wide scope (which usually spans many processes or even remote machines). "Binding" is concerned about how _values_ are assigned to symbols. This is also a bit explained in the FAQ: http://software-lab.de/doc/faq.html#dynamic or http://software-lab.de/doc/faq.html#closures The Scheme people seem to always confuse this, because Scheme has no clear separation between symbols (which have a distinct identity in real Lisp) and their bindings. When you write the name of a variable in Scheme, it is just a name for a value on the stack frame, and afaik there is no "binding" of a symbol involved. ♪♫ Alex -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe