# Day #5: Functional Programming with Python.

Hey. Hope you have been enjoying the series so far. Today is the Day 5 of the #100DaysOfCodeChallenge. Received a problem previously asked by Jane Street (refer the hyperlink for the company details) with a medium tag to it. This question is a true puzzle and can be solved in a minute if your functional programming understanding is strong.

You may get confused with the question, just like the way I did. I will try my best in putting the solution in the simplest way possible. You can always reach out to me if you need help.

## The Question On Day #5:

`cons(a, b)`

constructs a pair, and `car(pair)`

and `cdr(pair)`

returns the first and last element of that pair. For example, `car(cons(3, 4))`

returns `3`

, and `cdr(cons(3, 4))`

returns `4`

.

Given this implementation of cons:

```
def cons(a, b):
def pair(f):
return f(a, b)
return pair
```

Implement `car`

and `cdr`

.

## Explanation

The question is a bit confusing but let us try to understand it clearly.

`cons`

is a function which takes two inputs (consider integers). It returns a value which is an function defined inside itself, i.e.`pair`

.`pair`

is a function which takes a function`f`

as input and returns the return value of its input function, i.e. the return value of the function`f`

is returned by`pair`

.- Now
`f`

is a function which will return a value. `f`

is the key to all our solution.

## Algorithm

- The end value obtained on calling the function cons is a function pointer pointing to the
`pair`

function. - The required implementation goes as follows:

**Python Code**

**Output**
3
4

**Explanation**

When ** car(cons(3,4))** is called,

- cons(3,4) is invoked in the first place.
- cons returns the function pair function.
- The parameter passed to the
`car`

function is the`pair`

function. `car`

function returns the value returned by calling the`pair`

function.`pair`

function takes a function as input, so we pass the`left`

function to it.`pair`

function returns the value obtained by passing a, b to a a function`f`

. So, our`left`

is the function`f`

, which takes a, b as input and returns a as output to the`pair`

function.- Now the same a is returned by
`pair`

function to the`car`

function, which will again return the same value of a. - Now a is returned at the end and printed.
- Same goes with the function
`cdr`

.

#The Python visualiser is very much needed to understand this logic more clearly, please refer it here.

I hope you were able to understand this problem. Feel free to reach out for any query clearance.

**Thanks and cheers:)**