(* Env -- implemented as association lists *) type ('key, 'data) env = ('key * 'data) list val empty = [] fun lookup [] x = raise Subscript | lookup ((y, v)::yr) x = if x=y then v else lookup yr x fun bind1 env kv = kv :: env fun bind env kvs = kvs @ env fun bindZip env (ks, vs) = ListPair.zip(ks, vs) @ env fun fromList kvs = kvs fun plus (env1, env2) = env2 @ env1