Example #1
0
    def procedure_tr(self, ctx, lst):
        if len(lst) != 2:
            raise WrongArgsNumber

        (w_procedure, w_lst) = lst
        if not isinstance(w_procedure, W_Procedure):
            raise WrongArgType(w_procedure, "Procedure")

        if not isinstance(w_lst, W_List):
            raise WrongArgType(w_lst, "List")

        return w_procedure.call_tr(ctx, w_lst)
Example #2
0
 def oper(self, x, y):
     if isinstance(x, W_Integer) and isinstance(y, W_Integer):
         return W_Integer(self.do_oper(x.to_fixnum(), y.to_fixnum()))
     elif isinstance(x, W_Number) or isinstance(y, W_Number):
         return W_Real(self.do_oper(x.to_float(), y.to_float()))
     else:
         raise WrongArgType(x, "Number")
Example #3
0
 def unary_oper(self, x):
     if isinstance(x, W_Integer):
         return W_Integer(self.do_unary_oper(x.to_fixnum()))
     elif isinstance(x, W_Number):
         return W_Real(self.do_unary_oper(x.to_float()))
     else:
         raise WrongArgType(x, "Number")
Example #4
0
    def procedure(self, ctx, lst):
        if len(lst) < 2:
            return W_Boolean(True)

        prev = lst[0]
        if not isinstance(prev, W_Number):
            raise WrongArgType(prev, "Number")

        for arg in lst[1:]:
            if not isinstance(arg, W_Number):
                raise WrongArgType(arg, "Number")

            if prev.to_number() != arg.to_number():
                return W_Boolean(False)
            prev = arg

        return W_Boolean(True)
Example #5
0
    def procedure(self, ctx, lst):
        w_pair = lst[0]
        w_obj = lst[1]
        if not isinstance(w_pair, W_Pair):
            raise WrongArgType(w_pair, "Pair")

        w_pair.cdr = w_obj
        return w_undefined
Example #6
0
    def procedure(self, ctx, lst):
        if len(lst) != 1:
            raise WrongArgsNumber

        w_obj = lst[0]
        if not isinstance(w_obj, W_Number):
            raise WrongArgType(w_obj, "Number")

        return W_Boolean(self.predicate(w_obj))
Example #7
0
    def procedure(self, ctx, lst):
        if len(lst) != 1:
            raise WrongArgsNumber

        w_promise = lst[0]
        if not isinstance(w_promise, W_Promise):
            raise WrongArgType(w_promise, "Promise")

        return w_promise.force(ctx)
Example #8
0
    def procedure(self, ctx, lst):
        if len(lst) == 0:
            if self.default_result is None:
                raise WrongArgsNumber()

            return self.default_result

        if len(lst) == 1:
            if not isinstance(lst[0], W_Number):
                raise WrongArgType(lst[0], "Number")
            return self.unary_oper(lst[0])

        acc = None
        for arg in lst:
            if not isinstance(arg, W_Number):
                raise WrongArgType(arg, "Number")
            if acc is None:
                acc = arg
            else:
                acc = self.oper(acc, arg)

        return acc
Example #9
0
    def predicate(self, w_obj):
        if not w_obj.is_integer():
            raise WrongArgType(w_obj, "Integer")

        return w_obj.round() % 2 == 0
Example #10
0
 def procedure(self, ctx, lst):
     w_pair = lst[0]
     if not isinstance(w_pair, W_Pair):
         raise WrongArgType(w_pair, "Pair")
     return w_pair.cdr