public Value Evaluate(Scope scope) { return scope.Find(Name, Body.Evaluate(scope)); }
public Value Evaluate(Scope scope) { if (Scope == null) return scope.Find(Name); else { Value v = Scope.Evaluate(scope).Self(); if (v.Type == GTType.List) return new GTTree(from s in v.Enumerate() select new Usage(Name, s).Evaluate(scope)); else if (v.Type == GTType.Scope) return ((Scope)v).Find(Name); else throw new InvalidOperationException("Cannot dereference from non-scope value: " + v.ToString()); } }