I do wish people wouldn't say "beg the question" https://grammarist.com/rhetoric/begging-the-question-fallacy/ when they mean "invites" or "raises" the question. Sigh. Yes, Smalltalk is just like Lua here. |f g| "declare f and g as local variables" f := [... g value ...]. "f uses g's current value" g := [... f value ...]. "g uses f's current value" You cannot mix declarations and statements in Smalltalk. Local variables have to be declared before use. On Thu, 16 May 2019 at 11:31, Brainstorms <wild.ideas@gmail.com> wrote:
Richard,
Question from someone still fairly new to Smalltalk:
To implement the example you gave regarding mutually recursive functions in Lua, one must write something like this:
local f, g
function g () <do something> f() <do something> end
function f () <do something> g() <do something> end
where the initial declaration of f & g as locals defines an f such that g will see it (as a local, albeit containing nil) when g is defined. The following definition of f doesn't require this, of course. And g doesn't care what f contains -- until execution time.
Both Lua and Smalltalk implement full lexical closures, so it begs the question: Do the blocks defined in your example have this same issue? What is 'g' in the block assigned to f?
Is it required that 'g' be lexically defined prior to referencing it in a block closure, or does Smalltalk have a mechanism to resolve this at execution time?
Thanks, -Ted
-- Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html