In [5]:
def twoMutiple(L):
    if len(L)==2:
        return [L[0]*L[1]]
    elif len(L)==1:
        return [L[0]]
    else:
        return [L[0]*L[1]]+twoMutiple(L[2:])

In [26]:
def max_u(L,c):
    if len(L)==1:
        return c
    else:
        return max_u(L[1:],max(L[0],c))

In [19]:
# 7.2 
def maxium(L):
    if len(L)==0:
        return []
    else:
        return [L[0]]+list(filter(lambda x:x>L[0],maxium(L[1:])))
print(maxium([3,6,2,1,8,7,12]))
print(maxium([9,2,10,3,14,9]))


[3, 6, 8, 12]
[9, 10, 14]

In [26]:
def Map(function,L):
    if len(L) is 0:
        return []
    else:
        return [function(L[0])]+Map(function,L[1:])
Map(lambda x:x+1,[4,5,6])


Out[26]:
[5, 6, 7]

In [2]:
b=[1,[2,[4],[5,[7],[8]]],[3,[6]]]
def p(L):
    if len(L)==1:
        return [L];
    else:
        data=L[0]
        paths=[]
        for items in L[1:]:
            print([[data] + sublist for sublist in p(items)])
            paths.extend([[data] + sublist for sublist in p(items)])          
        return paths

In [ ]: