Esempio n. 1
0
def syntaxLet(operands, env):
    binding_pairs = operands.car
    body = operands.cdr
    ptrees = (x.car for x in from_cons(binding_pairs))
    forms = (x.cdr.car for x in from_cons(binding_pairs))
    args_lists = [evaluate(form, env) for form in forms]
    bindings = match_let(ptrees, args_lists)
    return evaluate_seq(body, bindings + env)
Esempio n. 2
0
def primArithmetic1(operands, env, arith):
    first, *args = list(evaluate(form, env) for form in from_cons(operands))
    values = (arg.value for arg in args)
    result = functools.reduce(arith, values, first.value)
    if all(isinstance(arg, Exact) for arg in itertools.chain((first,), args)):
        return Exact(result)
    else:
        return Inexact(result)
Esempio n. 3
0
def primArithmetic(operands, env, arith, start):
    args = list(evaluate(form, env) for form in from_cons(operands))
    values = (arg.value for arg in args)
    result = functools.reduce(arith, values, start)
    if all(isinstance(arg, Exact) for arg in args):
        return Exact(result)
    else:
        return Inexact(result)
Esempio n. 4
0
 def apply(self, operands, env):
     args = to_cons(evaluate(form, env) for form in from_cons(operands))
     bindings = match(self.ptree, args) + self.env
     return evaluate_seq(self.body, bindings)
Esempio n. 5
0
def evaluate_seq(body, env):
    return evaluate_many(from_cons(body), env)
Esempio n. 6
0
def primPrint(operands, env): # pragma: no cover
    print(*(evaluate(form, env) for form in from_cons(operands)))
Esempio n. 7
0
def primList(operands, env):
    return to_cons(evaluate(form, env) for form in from_cons(operands))
Esempio n. 8
0
def syntaxDefmacro(operands, env):
    var, ptree, *body = tuple(from_cons(operands))
    macro = Macro(ptree, to_cons(body), env)
    env.add(var.name, macro)
    return macro
Esempio n. 9
0
def syntaxDefine(operands, env):
    var, form = tuple(from_cons(operands))
    result = evaluate(form, env)
    var.add(env, result)
    return result
Esempio n. 10
0
def syntaxSetBang(operands, env):
    var, form = tuple(from_cons(operands))
    result = evaluate(form, env)
    var.set(env, result)
    return result
Esempio n. 11
0
def read_many(string):
    r = Reader(string)
    return from_cons(r.expressions())
Esempio n. 12
0
def read_many(string):
    r = Reader(string)
    return from_cons(r.expressions())