Racket
Сергей Шишкинhttps://docs.racket-lang.org/index.html (Контрактное программирование)
Как проектировать программы (Программы - это функций и определения, Проектирование условий, Функции как данные, Проектирование функций для самореферентных определений данных, Функции, производящие функции, Генерирующая рекурсия, Проектирование функций в стиле аккумуляторов, Память для функций, Память и переменные состояния, Функции, инициализирующие память, Функции, изменяющие память, Состояние инициализации, Изменения состояния в результате взаимодействия, Изменение состояния в результате рекурсии, Абстрагирование с помощью переменных состояний, Структуры из функций, Изменяемые функциональные структуры)