def test_pair_from_list(self): s1 = symbol('s1') s2 = symbol('s2') p = list_to_pair([s1, s2]) self.assertEquals(p.car_w(), s1) self.assertEquals(p.cdr_w().car_w(), s2) self.assertEquals(p.cdr_w().cdr_w(), w_nil)
def test_pair_from_list(self): s1 = symbol("s1") s2 = symbol("s2") p = list_to_pair([s1, s2]) self.assertEquals(p.car_w(), s1) self.assertEquals(p.cdr_w().car_w(), s2) self.assertEquals(p.cdr_w().cdr_w(), w_nil)
def build_def(w_form, w_args): if len(w_args) < 2: raise W_ValueError('define requires at least 2 args', w_form, 'build_def()').wrap() w_first = w_args[0] if isinstance(w_first, W_Symbol): # is symbol, a normal define if len(w_args) != 2: raise W_ValueError('define variable requires 2 args', w_form, 'build_def()').wrap() w_name = w_first form = w_args[1].to_ast() elif isinstance(w_first, W_Pair): # is pair, we are defining lambda name_formals_w, w_rest = w_first.to_list() w_name = name_formals_w[0] formals_w = list_to_pair(name_formals_w[1:], w_rest) w_lambda_form = [formals_w] + w_args[1:] form = build_lambda(w_form, w_lambda_form) else: raise W_TypeError('Pair or Symbol', w_first, 'build_def()').wrap() if not isinstance(w_name, W_Symbol): raise W_TypeError('Symbol', w_name, 'build_def()').wrap() if isinstance(form, Lambda): form.name = w_name.sval return Def(Var(w_name), form)