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 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 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 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 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 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 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 x_point(p): return utility.car(p)
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 deep_reverse_of_length_one(lst): return deep_reverse_element(utility.car(lst))
def left_branch(mobile): return utility.car(mobile)
def iter(things, answer): if is_null(things): return answer else: iter(cdr(things), cons(answer, square(car(things))))
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 width_rectangle(r): return utility.car(r)
def branch_structure(branch): return utility.car(utility.cdr(branch))
def branch_length(branch): return utility.car(branch)
def right_branch(mobile): return utility.car(utility.cdr(mobile))
def start_segment(s): return utility.car(s)
def accumulate(op, initial, list): if is_null(list): return initial else: return op(car(list), accumulate(op, initial, cdr(list)))
def start_rectangle(r): return utility.car(r)
def numer(x): return utility.car(x)
def lower_bound(x): return utility.car(x)
def first_denomination(coin_values): return utility.car(coin_values)