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 functionf
as input and returns the return value of its input function, i.e. the return value of the functionf
is returned bypair
.  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 thepair
function. 
car
function returns the value returned by calling thepair
function. 
pair
function takes a function as input, so we pass theleft
function to it. 
pair
function returns the value obtained by passing a, b to a a functionf
. So, ourleft
is the functionf
, which takes a, b as input and returns a as output to thepair
function.  Now the same a is returned by
pair
function to thecar
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:)
Top comments (0)