internal Expression Generate(Expression parent, int level, Random rand) { Expression ret = null; if (level == 0) { if (!g) { ret = new VariableExpression(); g = true; } else { ret = new ConstantExpression(); ret.Generate(this, level, rand); } } else { ret = (Expression)Activator.CreateInstance(ExpressionTypes[rand.Next(0, ExpressionTypes.Length)]); ret.Generate(this, level - 1, rand); } ret.Parent = parent; return(ret); }
internal Expression Generate(Expression parent, int level, Random rand) { Expression ret = null; if (level == 0) { if (!g) { ret = new VariableExpression(); g = true; } else { // Generate a new random number (constant). ret = new ConstantExpression(); ret.Generate(this, level, rand); } } else { // Instead generate a new expression. // This leads to multiple expressions in the same root expression. ret = (Expression)Activator.CreateInstance(ExpressionTypes[rand.Next(0, ExpressionTypes.Length)]); ret.Generate(this, level - 1, rand); } ret.Parent = parent; return(ret); }