Eric, I'm pretty sure that you may be misunderstanding here. In the example listed below, the node labeled "ADF" would be an *ADF* class, not an *ADFArgument* class. The (in this case: one) ADFArgument node would not be in the function set of the result-producing branch, but in the ADF branch. For example, let's say the result branch is the one you listed below. I'll put it in Lisp form: (if xx (adf (if yx yy yz)) xy) When the 'adf' node is called, we first call its subtree (if yx yy yz) and store that in a variable called, say, foo0. Then ccontrol is transferred to its corresponding ADF tree. Let's say that tree looks like this: ADF: (* (sin adfargument0) (+ x 1)) When the adfargument0 terminal is called, it returns the value of foo0. Ultimately the ADF tree returns a value, let's say it's 'bar'. Control then returns to the result branch and the 'adf' node returns the value bar, and we continue on our merry way. Sean Eric B wrote: > On Wed, 25 Feb 2009 15:08:05 -0500, Sean Luke <[log in to unmask]> wrote: > >> It looks like your function sets are all messed up. You don't seem to >> have ADFArgument nodes in the function set of the ADF tree you created. >> And you may be using types (it's not clear) but are missing >> nonterminals entirely for a certain function set. Perhaps gp.fs.0.size >> or gp.fs.1.size or whatnot has the wrong number? >> >> Take a look not at the lawnmower problem but the two-box problem, which >> actually has an ADF that takes some arguments. >> >> Sean > > > I don't want to use ADFArgument because with ADFArugment only terminals are > accapted as argument. It's in the code of ADFArgument itself! > What I want is an ADF that takes as argument a subtree! I know the type of > the root of that tree (it's the If function which takes 3 arguments). So > basically I want to be able to have the following trees. > > This is the result producing branch: > > if > | > ----------------------------- > | | | > xx ADF xy > | > if > | > ---------- > | | | > yx yy yz > > I hope the lay out won't be messed up.