#!/usr/bin/env ruby module Orelang module Operator extend self attr_reader :op @op = {} @op["+"] = -> (e, args) { args.reduce(0) { |a, n| a + e.eval(n) } } @op["*"] = -> (e, args) { args.reduce(1) { |a, n| a * e.eval(n) } } @op["="] = -> (e, args) { e.eval(args[0]) === e.eval(args[1]) } @op["set"] = -> (e, args) { e.vars[e.eval(args[0])] = e.eval(args[1]) } @op["get"] = -> (e, args) { e.vars[e.eva