class AST::FunctionDefinition attr_reader :name, :parameters, :body, :env def initialize(name, parameters, body, env = nil) @name = name @parameters = parameters @body = body @env = env end def ==(other) other.is_a?(AST::FunctionDefinition) && other.name == @name && other.parameters == @parameters && other.body == @body end def execute(env) return AST::FunctionDefinition.new(@name, @parameters, @body, env) if @name.nil? env.set(@name.name, self) end end