[Newbies] Re: block in recursion, Any cure for that kind of situation?

Klaus D. Witzel klaus.witzel at cobss.com
Wed Jan 23 12:37:22 UTC 2008


Hi Hilaire,

on Wed, 23 Jan 2008 09:49:07 +0100, you wrote:

>
> Le mardi 22 janvier 2008 à 22:16 +0000, Marcin Tustin a écrit :
>> I'm an idiot. That doesn't work either. Why not?
>
> Because still nested, I guess.
> Anyway I want to use that for teacher to design programmaticaly
> interactige geometry figure for Drgeo. So it have to keep simple and be
> usable in a Workspace.
>
> The only alternative I see is to define a class with methods, but it is
> a bit more complex for the target audiance.

You don't have to. I use recursive blocks in Smalltalk workspace all the  
time. The "trick" is from the Self language, which always clones  
activation record before using them. Example:

  recursiveBlock := [:argV |
    argV < 1
     ifFalse: [argV + (recursiveBlock clone value: argV - 1)]
     ifTrue: [argV]].

  recursiveBlock clone value: 17

You could send #copy instead of #clone but I prefer the latter in honor of  
Self.

Enjoy!

/Klaus

P.S. beware of the #fixTemps symptom in Squeak's implementation of blocks,  
was discussed several times over in squeak-dev.

> Hilaire
>




More information about the Beginners mailing list