def minus(inp): sym = symbol(toList("minus")) lf = symbol(toList("(")) rf = symbol(toList(")")) return bind( sym, lambda _: bind( lf, lambda _: bind( expr, lambda e: bind(rf, lambda _: mret(minus_exp(e))))))(inp)
def diff(inp): neg = symbol(toList("-")) lf = symbol(toList("(")) rf = symbol(toList(")")) return bind(neg,lambda _: bind(lf,lambda _ : bind(expr,lambda e1 : bind(expr,lambda e2 : bind(rf,lambda _ : mret (diff_exp(e1,e2)) )))))(inp)
def letexp(inp): let = symbol(toList("let")) defn = symbol(toList("=")) In = symbol(toList("in")) return bind(let ,lambda _ : bind(var ,lambda var1: bind(defn ,lambda _ : bind(expr ,lambda e1: bind(In ,lambda _: bind(expr ,lambda body: mret( let_exp(var1,e1,body) )))))))(inp)
def ifexp(inp): i = symbol(toList("if")) then = symbol(toList("then")) els = symbol(toList("else")) return bind(i , lambda _ : bind(expr , lambda e1 : bind(then , lambda _ : bind(expr , lambda e2 : bind(els , lambda _ : bind(expr , lambda e3 : mret( if_exp(e1,e2,e3) ) ))))))(inp)
def variable(inp): keylst = [ "minus", "zero?", "equal?", "greate?", "less?", "cons", "nil", "car", "cdr", "null?", "let", "in", "if", "then", "else" ] keylst = toList(list(map(toList, keylst))) return identifier(keylst)(inp)
def pcar(inp): sym = symbol(toList("car")) return bind(sym,lambda _ : bind(expr,lambda e: mret( car_exp(e) )))(inp)
def pcons(inp): sym = symbol(toList("cons")) return bind(sym,lambda _: bind(expr,lambda e1: bind(expr,lambda e2: mret( cons_exp(e1,e2) ))))(inp)
def pnil(inp): sym = symbol(toList("nil")) return bind(sym,lambda _ : mret( nil_exp() ) )(inp)
def equalp(inp): ep = symbol(toList("equal?")) return bind(ep,lambda _: bind(expr,lambda e1: bind(expr,lambda e2: mret( equalp_exp(e1,e2) ) )))(inp)
def lessp(inp): lp = symbol(toList("less?")) return bind(lp,lambda _: bind(expr,lambda e1: bind(expr,lambda e2: mret ( lessp_exp(e1,e2) ) )))(inp)
def greatep(inp): gp = symbol(toList("greate?")) return bind(gp,lambda _: bind(expr,lambda e1: bind(expr,lambda e2: mret ( greatep_exp(e1,e2) ) )))(inp)
def zerop(inp): zp = symbol(toList("zero?")) return bind(zp,lambda _: bind(expr,lambda e: mret(zerop_exp(e))))(inp)
def paren(inp): lf = symbol(toList("(")) rf = symbol(toList(")")) return bracket(lf)(Expr)(rf)(inp)
def nullp(inp): sym = symbol(toList("null?")) return bind(sym,lambda _: bind(expr,lambda e: mret( nullp_exp(e) )))(inp)
def variable(inp): keylst = ["minus", "zero?", "let", "in", "if", "then", "else"] keylst = toList(list(map(toList, keylst))) return identifier(keylst)(inp)