# .css-df1pn7{display:block;width:16rem;}     # Day #5: Functional Programming with Python.

Manish Reddy Nandineni
·Jun 15, 2020·

Subscribe to my newsletter and never miss my upcoming articles

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:

Output 3 4

## Explanation

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

1. cons(3,4) is invoked in the first place.
2. cons returns the function pair function.
3. The parameter passed to the `car` function is the `pair` function.
4. `car` function returns the value returned by calling the `pair` function.
5. `pair` function takes a function as input, so we pass the `left` function to it.
6. `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.
7. Now the same a is returned by `pair` function to the `car` function, which will again return the same value of a.
8. Now a is returned at the end and printed.
9. 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:)