Пример #1
0
def negative(vals):
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        if not v.lt(kt.zero):
            return kt.false
    return kt.true
Пример #2
0
def mul(vals):
    accum = kt.one
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        accum = accum.mul(v)
    return accum
Пример #3
0
def positive(vals):
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        if not kt.zero.lt(v):
            return kt.false
    return kt.true
Пример #4
0
def string_append(vals):
    s = rstring.StringBuilder()
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.String)
        assert isinstance(v, kt.String)
        s.append(v.strval)
    return kt.String(s.build())
Пример #5
0
def add(vals):
    accum = kt.Fixnum(0)
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        accum = accum.add(v)
    return accum
Пример #6
0
def binds(vals, env, cont):
    pyvals = kt.pythonify_list(vals)
    if len(pyvals) < 1:
        kt.signal_arity_mismatch(">=1", vals)
    for symbol in pyvals[1:]:
        kt.check_type(symbol, kt.Symbol)
    env_expr = pyvals[0]
    return env_expr, env, kt.BindsCont(pyvals, cont)
Пример #7
0
def gt(vals):
    latest = kt.e_pos_inf
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        if not v.lt(latest):
            return kt.false
        latest = v
    return kt.true
Пример #8
0
def zerop(vals):
    for v in kt.iter_list(vals):
        # Robustness: we need to check the type of all elements, even those
        # after the first non-zero.
        kt.check_type(v, kt.Number)
    for v in kt.iter_list(vals):
        if not kt.zero.equal(v):
            return kt.false
    return kt.true
Пример #9
0
def apply_(vals, env_ignore, cont):
    ls = kt.pythonify_list(vals)
    if len(ls) == 2:
        applicative, args = ls
        env = kt.Environment([])
    else:
        applicative, args, env = ls
    kt.check_type(applicative, kt.Applicative)
    return kt.Pair(applicative.wrapped_combiner, args), env, cont
Пример #10
0
def lteq(vals):
    latest = kt.e_neg_inf
    for v in kt.iter_list(vals):
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        if not latest.lt(v):
            return kt.false
        latest = v
    return kt.true
Пример #11
0
def sub(vals):
    ls = kt.pythonify_list(vals)
    if len(ls) < 2:
        kt.signal_arity_mismatch('>=2', vals)
    accum = ls[0]
    for v in ls[1:]:
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        accum = accum.sub(v)
    return accum
Пример #12
0
def lteq(vals):
    ls = kt.pythonify_list(vals)
    if len(ls) < 2:
        return kt.true
    latest = ls[0]
    for v in ls[1:]:
        kt.check_type(v, kt.Number)
        assert isinstance(v, kt.Number)
        if not latest.equal(v):
            return kt.false
        latest = v
    return kt.true
Пример #13
0
 def wrapped(otree, *etc):
     args_tuple = ()
     rest = otree
     for type_ in unroll_argtypes:
         assert isinstance(rest, kt.Pair)
         arg = rest.car
         rest = rest.cdr
         kt.check_type(arg, type_)
         assert isinstance(arg, type_)
         args_tuple += (arg,)
     assert kt.is_nil(rest)
     args_tuple += etc
     return fn(*args_tuple)
Пример #14
0
def orp(vals):
    rest = vals
    ret = kt.false
    while isinstance(rest, kt.Pair):
        v = rest.car
        kt.check_type(v, kt.Boolean)
        if kt.true.equal(v):
            ret = kt.true
        rest = rest.cdr
    if kt.is_nil(rest):
        return ret
    else:
        kt.signal_value_error("Called 'or?' with non-list",
                              kt.Pair(vals, kt.nil))
Пример #15
0
def map_(vals, env, cont):
    try:
        args = kt.pythonify_list(vals)
    except kt.NonNullListTail:
        kt.signal_value_error("Argument tree to map is not a list", vals)
    else:
        if len(args) < 2:
            kt.signal_arity_mismatch(">=2", vals)
        app = args[0]
        kt.check_type(app, kt.Applicative)
        assert isinstance(app, kt.Applicative)
        lists = args[1:]
        return kt.map_(app.wrapped_combiner,
                       transpose(lists),
                       0,
                       env,
                       cont)
Пример #16
0
 def wrapped(otree, *etc):
     args_tuple = ()
     rest = otree
     for type_ in unroll_argtypes:
         if isinstance(rest, kt.Pair):
             arg = rest.car
             rest = rest.cdr
             kt.check_type(arg, type_)
             if isinstance(arg, type_):
                 args_tuple += (arg,)
             else:
                 kt.signal_type_error(type_, arg)
         else:
             kt.signal_arity_mismatch(str(len(argtypes)),
                                      otree)
     if kt.is_nil(rest):
         args_tuple += etc
         return fn(*args_tuple)
     else:
         kt.signal_arity_mismatch(str(len(argtypes)),
                                  otree)
Пример #17
0
def extend_continuation(vals, env, cont):
    args = kt.pythonify_list(vals)
    if len(args) == 2:
        cont_to_extend, receiver = args
        recv_env = kt.Environment([])
    else:
        cont_to_extend, receiver, recv_env = args
    kt.check_type(cont_to_extend, kt.Continuation)
    kt.check_type(receiver, kt.Applicative)
    kt.check_type(recv_env, kt.Environment)
    return kt.ExtendCont(receiver, recv_env, cont_to_extend), env, cont
Пример #18
0
def check_guards(guards):
    for guard in kt.iter_list(guards):
        selector, interceptor = kt.pythonify_list(guard)
        kt.check_type(selector, kt.Continuation)
        kt.check_type(interceptor, kt.Applicative)
        kt.check_type(interceptor.wrapped_combiner, kt.Operative)