#python #toyprogrammingchallenge Here is a problem that even though the answer seemed easy, I don't understand what it is supposed to be teaching, or what's going on. Anyone care to explain this problem to me?
# 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
def cons(a, b):
def pair(f):
return f(a, b)
return pair
def car(pair):
def f(a, b):
return a
return pair(f)
def cdr(pair):
def f(a, b):
return b
return pair(f)
print cdr(cons(3,4))
print car(cons(3,4))
@Absinthe It's an implementation of a lisp style list, using nothing but closures? No more point in it, than any other random puzzle I guess. I think without the cons hint it would have been more interesting, just "Implement cons, car and cdr using only functions/closures".
@namark what are the inplications of "cons" "car" and "cdr"? What are these terms suggesting?
@Absinthe Ah, those come from lisp, and are fundamental functions for working with lists(the fundamental data structure of lisp). Lot of fundamental.
cons (many chained together) is used to construct the list, car to get the first element, cdr to get the rest of the list after the first. These operation are enough to implement any sort of operation on these lists(treating them as immutable).
@namark well the internet knows all :)
https://www.gnu.org/software/emacs/manual/html_node/eintr/Strange-Names.html#Strange-Names
@Absinthe ancient abbreviations? and I was hoping they were some cool french words...