Print

Print


ADMs are used identically to ADFs: but they evaluate child trees
repeatedly and on-the-fly as called for in the remote tree.  This
emulates one essential difference between a macro and a function in
Lisp.

That being said, I don't think an ADM is exactly what you're looking
for.  Why not just write a nonterminal node which does a loop on its
kids like below?

Sean

On Dec 14, 2005, at 2:26 PM, George Coles wrote:

> Thanks for the tip. I have never used ADMs, for some reason I find
> them
> confusing - for example, should I call super.eval within the evaluate
> method?
>
> Sean Luke wrote:
>
>> It depends on how you want to do loops.  What do you mean by
>> automatically-defined-loops exactly?  It seems to me that the
>> straightforward way is to just have a loop macro as one of your
>> nodes, whose eval() method looks something like this:
>>
>>     result = empty
>>     n = eval first child
>>     loop n times or until MAX_ALLOWED_LOOPS:
>>         result = eval second child
>>     return result
>>
>> Or you could have a while loop along these lines:
>>
>>     count = 0;
>>     loop up to MAX_ALLOWED_LOOPS:
>>         n = eval first child
>>         if n == true then eval second child and return
>>     return empty
>>
>> Sean
>>
>> On Dec 7, 2005, at 7:55 PM, George Coles wrote:
>>
>>> Hi,
>>>    Can anyone point me to an example of automatically defined loops
>>> that works with tree-based GP? Has anyone implemented loops in ECJ?
>>> I am
>>> contemplating beginning to add this feature to my copy of ECJ and it
>>> seems a bit daunting. Could the ADF stack be leveraged somehow to do
>>> this? As an aside, it seems odd that iteration and recursion are not
>>> more popular as a topic of discussion. I expect that I will really
>>> need
>>> iteration, at least, in my project, and I would think that many
>>> people
>>> would find it very valuable.
>>>
>>> Thanks
>>> George Coles
>>>
>>