public override Value Handle(Expression left, Expression right, IDictionary<String, Value> symbols)
{
var args = default(String[]);
if (left is SymbolExpression)
{
args = new[] { ((SymbolExpression)left).SymbolName };
}
else if (left is BracketExpression)
{
var bracket = (BracketExpression)left;
if (bracket.HasContent)
{
if (bracket.IsSymbolList)
{
var expressions = bracket.GetSymbols().ToArray();
args = new String[expressions.Length];
for (var i = 0; i != args.Length; i++)
{
args[i] = expressions[i].SymbolName;
}
}
else
{
throw new YAMPWrongTypeSuppliedException("a list of symbols");
}
}
else
{
args = new String[0];
}
}
else
{
throw new YAMPWrongTypeSuppliedException("a symbol or a list of symbols contained in round brackets");
}
return new FunctionValue(args, right);
}