"""Lab 2: Higher Order Functions & Lambdas & Recursions""" # Lambda Functions def lambda_curry2(func): """ Returns a Curried version of a two-argument function FUNC. >>> from operator import add >>> curried_add = lambda_curry2(add) >>> add_three = curried_add(3) >>> add_three(5) 8 """ "*** YOUR CODE HERE ***" return ______ # Higher Order Functions def compose1(f, g): """Return the composition function which given x, computes f(g(x)). >>> add_one = lambda x: x + 1 # adds one to x >>> square = lambda x: x**2 >>> a1 = compose1(square, add_one) # (x + 1)^2 >>> a1(4) 25 >>> mul_three = lambda x: x * 3 # multiplies 3 to x >>> a2 = compose1(mul_three, a1) # ((x + 1)^2) * 3 >>> a2(4) 75 >>> a2(5) 108 """ return lambda x: f(g(x)) def composite_identity(f, g): """ Return a function with one parameter x that returns True if f(g(x)) is equal to g(f(x)). You can assume the result of g(x) is a valid input for f and vice versa. >>> add_one = lambda x: x + 1 # adds one to x >>> square = lambda x: x**2 >>> b1 = composite_identity(square, add_one) >>> b1(0) # (0 + 1)^2 == 0^2 + 1 True >>> b1(4) # (4 + 1)^2 != 4^2 + 1 False """ "*** YOUR CODE HERE ***"