(define lambda
(ruby_func " lambda { |arguments, interpreter| parameters = arguments[0] body = arguments[1, arguments.length] if parameters.is_a? Array if parameters.length != parameters.uniq.length raise 'Parameters declared more than once' end end lambda_environment = Theta::Environment.new(interpreter.current_environment) execute = lambda { |body, environment, interpreter| interpreter.current_environment = environment result = nil body.each do |expression| result = interpreter.evaluate(expression) end interpreter.current_environment = environment.parent return result } if parameters.is_a? Array lambda { |arguments, interpreter| parameters.each_index do |x| lambda_environment.define(parameters[x], interpreter.evaluate(arguments[x])) end execute.call(body, lambda_environment, interpreter) } elsif parameters.is_a? Symbol lambda { |arguments, interpreter| arguments.map! { |x| interpreter.evaluate(x) } lambda_environment.define(parameters, arguments) execute.call(body, lambda_environment, interpreter) } end } ")
)