Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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)))
Beispiel #4
0
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))
Beispiel #5
0
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))
Beispiel #6
0
 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))
Beispiel #7
0
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)
Beispiel #8
0
def x_point(p):
    return utility.car(p)
Beispiel #9
0
 def test_sub_interval(self):
     result = sub_interval(self.interval0, self.interval1)
     self.assertEqual(-14, utility.car(result))
     self.assertEqual(3, utility.cdr(result))
Beispiel #10
0
def for_each(f, lst):
    if not utility.is_null(lst):
        f(utility.car(lst))
        for_each(f, utility.cdr(lst))
Beispiel #11
0
 def deep_reverse_of_length_one(lst):
     return deep_reverse_element(utility.car(lst))
Beispiel #12
0
def left_branch(mobile):
    return utility.car(mobile)
Beispiel #13
0
 def iter(things, answer):
     if is_null(things):
         return answer
     else:
         iter(cdr(things), cons(answer, square(car(things))))
Beispiel #14
0
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))
Beispiel #15
0
def width_rectangle(r):
    return utility.car(r)
Beispiel #16
0
def branch_structure(branch):
    return utility.car(utility.cdr(branch))
Beispiel #17
0
def branch_length(branch):
    return utility.car(branch)
Beispiel #18
0
def right_branch(mobile):
    return utility.car(utility.cdr(mobile))
Beispiel #19
0
def start_segment(s):
    return utility.car(s)
Beispiel #20
0
def accumulate(op, initial, list):
    if is_null(list):
        return initial
    else:
        return op(car(list), accumulate(op, initial, cdr(list)))
Beispiel #21
0
def start_rectangle(r):
    return utility.car(r)
Beispiel #22
0
def numer(x):
    return utility.car(x)
Beispiel #23
0
def lower_bound(x):
    return utility.car(x)
Beispiel #24
0
def first_denomination(coin_values):
    return utility.car(coin_values)