def plusOne(x):
    return x+1
def double(x):
    return 2*x
def comp(f,g):
    def fOFg(x):
        return f(g(x))
    return fOFg
print (comp(plusOne,double)(2))
print (comp(double,plusOne)(2))

def plusOneF(f):
    def dummyF(x):
        return f(x)+1
    return dummyF
print (plusOneF(double)(5))

def doubleF(f):
    def dummyF(x):
        return 2*f(x)
    return dummyF
print (doubleF(plusOne)(33))
print (plusOne(plusOne(3)))
print (plusOneF(plusOne)(3))
