On Friday, 18 December 2020 at 15:20:59 UTC+1, Abdur-Rahmaan Janhangeer wrote:
> The Question:
>
> # ---
> 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, 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.
> # ---
Notice that you don't need (Python) lambdas to code it, plain function
definitions are fine:
# ---
def cons(a, b):
def pair(f):
return f(a, b)
return pair
def car(pair):
def left(a, b):
return a
return pair(left)
pair = cons(1, 2)
assert car(pair) == 1
# ---
That said, few basic comments: In Python, that 'cons' does not construct a
pair, it rather returns a function with values a and b in its closure that,
given some function, applies it to those values. In fact, Python has tuples
built-in, how to build them as well as how to access their members. I take it
the point of the exercise is how to use a purely functional language, such as
here a fragment of Python, to encode (i.e. formalize) pairs and their
operations.
Julio
--
https://mail.python.org/mailman/listinfo/python-list