def bind_arguments(env: Scope, params: Node, args: Value) -> None: if isinstance(params, Name) and args is NULL_PAIR_VALUE: env.put(params.identifier, args) return while True: if params is NULL_PAIR and args is NULL_PAIR_VALUE: return elif params is NULL_PAIR and args is not NULL_PAIR_VALUE: raise ArgsNotFit('too many arguments') elif params is not NULL_PAIR and args is NULL_PAIR_VALUE: raise ArgsNotFit('missing arguments') if isinstance(params, Pair): name: Name = params.first if not isinstance(args, PairValue): raise ArgsNotFit('arguments does not match given number') env.put(name.identifier, args.first) params = params.second elif isinstance(params, Name): env.put(params.identifier, args) return
def define(env: Scope, pattern: str, value: Value) -> None: env.put(pattern, value)