def last_pair(lst): if utility.is_null(lst): raise ValueError('empty list') if utility.is_null(utility.cdr(lst)): return utility.car(lst) else: return last_pair(utility.cdr(lst))
def main(): lst0 = list(1, 3, list(5, 7), 9) print_list(lst0) seven0 = car( cdr( car( cdr( cdr(lst0))))) lst1 = list(list(7)) print_list(lst1) seven1 = car(car(lst1)) lst2 = list(1, list(2, list(3, list(4, list(5, list(6, 7)))))) print_list(lst2) seven2 = car(cdr( car(cdr( car(cdr( car(cdr( car(cdr( car(cdr(lst2)))))))))))) assert 7 == seven0 assert 7 == seven1 assert 7 == seven2
def same_parity_iter(a): """ :type a: FunctionType | object :return: """ if is_null(a): return None else: b = car(a) # type: int if is_even(x - b): return cons(b, same_parity_iter(cdr(a))) else: return same_parity_iter(cdr(a))
def square_list(list): if utility.is_null(list): return utility.list() else: return utility.cons( square(utility.car(list)), square_list(utility.cdr(list)))
def is_pair(lst): if utility.is_list(lst): car_lst = utility.car(lst) cdr_lst = utility.cdr(lst) if (not utility.is_list(car_lst)) and (not utility.is_list(cdr_lst)): return True return False
def reverse(lst): if utility.is_null(lst): return None elif utility.length(lst) == 1: return lst else: x = utility.car(lst) xs = utility.cdr(lst) return utility.append(reverse(xs), utility.list(x))
def deep_reverse(lst): def deep_reverse_element(a): if callable(a): return utility.list(deep_reverse(a)) else: return utility.list(a) def deep_reverse_of_length_one(lst): return deep_reverse_element(utility.car(lst)) # utility.print_list(lst) if utility.is_null(lst): return None elif utility.length(lst) == 1: return deep_reverse_of_length_one(lst) else: x = utility.car(lst) xs = utility.cdr(lst) x_rev = deep_reverse_element(x) xs_rev = deep_reverse(xs) return utility.append(xs_rev, x_rev)
def end_rectangle(r): return utility.cdr(r)
def y_point(p): return utility.cdr(p)
def end_segment(s): return utility.cdr(s)
def test_sub_interval(self): result = sub_interval(self.interval0, self.interval1) self.assertEqual(-14, utility.car(result)) self.assertEqual(3, utility.cdr(result))
def for_each(f, lst): if not utility.is_null(lst): f(utility.car(lst)) for_each(f, utility.cdr(lst))
def accumulate(op, initial, list): if is_null(list): return initial else: return op(car(list), accumulate(op, initial, cdr(list)))
def iter(things, answer): if is_null(things): return answer else: iter(cdr(things), cons(answer, square(car(things))))
def length_rectangle(r): return utility.cdr(r)
def subsets(l): if is_null(l): return list(list()) rest = subsets(cdr(l)) return append(rest, map(lambda x: cons(car(l), x) , rest))
def branch_structure(branch): return utility.car(utility.cdr(branch))
def right_branch(mobile): return utility.car(utility.cdr(mobile))
def denom(x): return utility.cdr(x)
def upper_bound(x): return utility.cdr(x)
def except_first_denomination(coin_values): return utility.cdr(coin_values)