Example #1
0
def define_func(args, env):

    if isinstance(first(args), LispSymbol):
        # we have the first form

        args = to_list(args)
        assert args[-1] is nil
        assert len(args) == 3

        var = args[0]
        value = args[1]

    elif isinstance(first(args), LispPair):
        # we have the second form

        var = first(first(args))
        param = rest(first(args))
        body = rest(args)

        assert isinstance(var, (LispSymbol, LispPair))

        value = from_list([mksym("lambda"), param, body])
    else:
        raise Exception("invalid form")

    assert isinstance(var, LispSymbol)
    result = value.scm_eval(env)

    # todo set the datatype
    env.define(var.name, None, result)
    return nil
Example #2
0
def class_func(args, env):

    # turn to a list and remove the trailing nil
    parents = to_list(args)[:-1]

    # lookup the parents
    evaled_parents = [parent.scm_eval(env) for parent in parents]

    return LispClass(evaled_parents)
Example #3
0
def begin_func(args, env):

    args = to_list(args)
    assert args[-1] is nil, "invalid args for 'begin': %s" % args
    assert len(args) >= 2, "invalid args for 'begin': %s" % args

    for arg in args[:-1]:
        result = arg.scm_eval(env)
    return result
Example #4
0
    def func(args, env):
        evaled_args = [arg.scm_eval(env) for arg in to_list(args)][:-1]

        assert len(evaled_args) == 2
        assert isinstance(evaled_args[0], LispInteger)
        assert isinstance(evaled_args[1], LispInteger)
        result = inputfunction(evaled_args[0].num, evaled_args[1].num)
        if isinstance(result, int):
            result = LispInteger(result)
        return result
Example #5
0
def class_chmod_func(args, env):

    class_name = first(args)
    var_name = first(rest(args))
    flags = to_list(rest(rest(args)))[:-1]

    evaled_class = class_name.scm_eval(env)
    evaled_var   = var_name.scm_eval(env).name
    evaled_flags = [flag.scm_eval(env).name for flag in flags]

    evaled_class.chmod(evaled_var, evaled_flags)
    return nil
Example #6
0
def set_func(args, env):
    args = to_list(args)
    assert args[-1] is nil
    assert len(args) == 3

    var = args[0]
    arg = args[1]

    assert isinstance(var, LispSymbol)

    evaled_arg = arg.scm_eval(env)
    env.set(var.name, evaled_arg)
    return nil
Example #7
0
def if_func(args, env):

    args = to_list(args)
    assert args[-1] is nil
    assert 3 <= len(args) <= 4
    
    predicate   = args[0]
    consequence = args[1]
    alternative = args[2]

    result = predicate.scm_eval(env)

    if result is true:
        return consequence.scm_eval(env)
    else:
        return alternative.scm_eval(env)
Example #8
0
 def func(args, env):
     evaled_args = [arg.scm_eval(env) for arg in to_list(args)][:-1]
     result = inputfunction(*evaled_args)
     if result is None: result = nil
     return result
Example #9
0
def quote_func(args, env):
    args = to_list(args)
    assert args[-1] is nil
    assert len(args) == 2
    return args[0]