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)