Закончил курс о составных данных. Самое крутое там идет в конце — реализация пар на джаваскрипте. Вот один из способов: https://repl.it/@buyfn/Pairs

Что самое удивительное, в определениях функций нет ни одной константы или переменной. Тем не менее это не мешает их использовать для хранения данных. Фишка в том, что при вызове cons создается новая функция, которая помнит, что было передано в cons, который ее создал.