def eval(self, t, env): #if variable definition if t.getCdr().getCar().isSymbol(): env.define( t.getCdr().getCar(), Cons(t.getCdr().getCdr().getCar().eval(env), Nil.getInstance())) #If definition is for a closure elif t.getCdr().getCar().isPair(): env.define(t.getCdr().getCar().getCar(), Cons(Closure(t.getCdr(), env), Nil.getInstance())) return Nil.getInstance()
def eval(self, exp, env): key = exp.getCdr().getCar() val = exp.getCdr().getCdr().getCar() # if defining a variable if key.isSymbol(): env.define(key, val) # if defining a function else: func = Closure( Cons(exp.getCdr().getCar().getCdr(), exp.getCdr().getCdr()), env) env.define(key.getCar(), func) return StrLit("no values returned")
def eval(self, exp, env): return Closure(exp.getCdr(), env, trimmed=True)
def eval(self, exp, env): return Closure(exp, env)
from Special import Special from Util import Util if __name__ == "__main__": # Initialization file with Scheme definitions of built-in functions ini_file = "ini.scm" prompt = "> " # Create scanner that reads from standard input scanner = Scanner(sys.stdin) util = Util() Cons.setUtil(util) BuiltIn.setUtil(util) Closure.setUtil(util) Special.setUtil(util) if (len(sys.argv) > 2 or (len(sys.argv) == 2 and sys.argv[1] != "-d")): sys.stderr.write("Usage: python3 SPP.py [-d]\n") sys.stderr.flush() sys.exit(2) # If command line option -d is provided, debug the scanner. if len(sys.argv) == 2 and sys.argv[1] == "-d": tok = scanner.getNextToken() while tok != None: tt = tok.getType() sys.stdout.write(str(tt)) if tt == TokenType.INT: