[plt-scheme] Does the procedure know who called it and how manytimes?

From: Chongkai Zhu (czhu at cs.utah.edu)
Date: Fri Jul 27 22:22:56 EDT 2007

Majorinc, Kazimir wrote:
> Chongkai Zhu wrote:
>>
>> Why do you need that? "Continuation Marks" is the closest thing I can 
>> think of. But if a function `foo' calls your `f' in tail position, 
>> the continuation mark of `foo' won't be available. Besides, the 
>> function calls you can install whatever mark they want.
>>
>> Chongkai
>>
> Let us imagine I have large tree data structure of nodes and I want to 
> calculate the SIZE of the subtree for some node. I can do it easily 
> with some recursive function.
>
> Now, my data structure is not the tree but it is more general graph. 
> Using the same recursive procedure, there is a lot of redundancy. I 
> can avoid that redundancy if I implement some kind of memoization of 
> the SIZE and store values in some hash-table, or much better in the 
> special field in the nodes of the graph. In both cases, I need to know 
> whether procedure is called by itself (and then obey existing 
> memoization) or it is called by some other function (and then initiate 
> new memoization.)
>
> There are few ways it can be done, for example, to define two 
> procedures, SIZE and SIZE-PRIVATE (called only from SIZE), but it is 
> certainly less elegant approach.
>
>
In this case, I suggest you to have the SIZE function take one more 
arguments, which tells whether it is called by itself or not (and if you 
need, how many times it calls itself).

Chongkai


Posted on the users mailing list.