I have subscribed to a website. Every day an email will be sent to my email about the description of the problem.
Problem
This problem was asked by Jane Street.
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,
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
.
Solution
It seems that the problem definition is not correct. cons
returns a function which receives
a function that can build a pair.
So a fixed version of cons
def cons(a, b):
return a, b
So cdr
and car
:
def car(pair):
"""Get the first element"""
if isinstance(pair[0], tuple):
return car(pair[0])
return pair[0]
def cdr(pair):
"""Get the last element"""
if isinstance(pair[1], tuple):
return car(pair[1])
return pair[1]