def notequalto(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value != args[1].value)]
def negate(interpreter, args): if len(args) != 1: raise Exception("NUM_ARGS") return [Literal(-args[0].value)]
def lessthan(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value < args[1].value)]
def modulus(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value % args[1].value)]
def greaterthanequalto(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value >= args[1].value)]
def multiply(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value * args[1].value)]
def divide(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value / args[1].value)]
def subtract(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value - args[1].value)]
def ceil(interpreter, args): if len(args) != 1: raise Exception("NUM_ARGS") return Literal(math.ceil(args[0].value))
def _random(interpreter, args): return Literal(random.random())
def _not(interpreter, args): if len(args) != 1: raise Exception("NUM_ARGS") return [Literal(not args[0].value)]
def _and(interpreter, args): if len(args) != 2: raise Exception("NUM_ARGS") return [Literal(args[0].value and args[1].value)]