Прохожу на хекслете курс “последовательности”. В нем рассказывается о новом типе составных данных, который называется “список”. Cписком называется упорядоченная последовательность значений.

Составные структуры данных удобно создавать на основе пар. Вот один из способов представить с помощью пар список [1, 2, 3]:

cons(1, (cons 2, (cons 3 null)))

В такой реализации список представляет собой цепочку вложенных пар, где в каждой паре первой частью является значение из списка, а второй — следующая пара. Второй частью последней пары является значение null, которое говорит, что список кончился.

Составлять списки вручную из пар крайне муторно, поэтому используют функцию-конструктор, которая принимает элементы списка как аргументы и возвращает список, составленный из пар:

makeList(1, 2, 3)

Как и у пары, у списка есть два селектора. head возвращает первый элемент списка. tail возвращает список с отсеченным первым элементом.

Создание списка из пар возможно благодаря тому, что результат выполнения функции cons можно снова передать в качестве аргумента в другой cons. И так до бесконечности. Такое свойство называют «замыкание». Термин был заимствован из алгебры: https://ru.wikipedia.org/wiki/Замыкание_(алгебра)

Так же замыканием в программировании называют объект, хранящий функцию вместе с окружением, в котором она была создана. Эти два понятия хоть и названы одним словом, но ничего общего между собой не имеют. Сделано это чтобы все казалось немного сложнее, чем есть на самом деле.