virtual ValueRef evaluate(Scope& scope) const { if(elements.size() == 0) { return std::shared_ptr<const Tuple>(this); } ValueRef first = elements[0]->evaluate(scope); return first->call(std::vector<ValueRef>(elements.begin()+1, elements.end()), scope); }
ValueRef call(ValueRef self, std::vector<ValueRef> args) { return self->call(self, args); }