Lisp: большая задача в маленькой формуле
Стопку дисков нужно перенести на другой стержень, каждый раз снимая только верхний диск и не помещая большой поверх маленького. «Башни Ханоя» быстро становятся неудобной головоломкой, если перебирать ходы вручную. Рекурсивная формула на картинке описывает решение для любого количества дисков.
Lisp появился в 1958 году: Джон Маккарти разрабатывал его для задач искусственного интеллекта и работы с символами. Функции, списки и рекурсивные определения позволяли записывать сложные вычисления компактно. Непривычные скобки подчиняются простому правилу: сначала операция, затем её аргументы. Например, "(+ 2 3)" означает сложение двух чисел.
За этим подходом стоит более ранняя математическая история. В 1930-х годах Алонзо Чёрч разработал лямбда-исчисление — систему, в которой вычисления описываются через функции и их применение. Функция может принимать другую функцию и возвращать новую. Из небольших преобразований складываются более сложные. Маккарти заимствовал у Чёрча лямбда-обозначение для записи функций в Lisp.
Решение головоломки строится из трёх частей: перенести верхние "n − 1" дисков на свободный стержень, перенести нижний диск на целевой, затем поставить на него маленькую стопку. Оба переноса меньшей стопки выполняются по тому же правилу. В этой записи "move" обозначает чистое преобразование состояния башен, а "compose" соединяет преобразования, применяя их справа налево. Поэтому строки внутри него читаются снизу вверх. При нуле дисков остаётся "identity" — преобразование, которое ничего не меняет. Эти вспомогательные определения опущены, чтобы оставить на виду саму рекурсию.
Как видите, всё элементарно, поэтому мнение, будто для программирования нужен особый склад ума, совершенно беспочвенно.
Ханойская башня в цикле
Мои приключения в бесконечных циклах анимации не заканчиваются. После того как я выложил свою первую анимацию https://dzen.ru/a/ZHTiHh9-I0tBSCuO или здесь на пикабу с бесконечным циклом.
На мое удивление мне предложили сделать еще одну. Но уже с "Ханойской башней".
Конечно мне пришлось сначала узнать что это, а потом уже заниматься процессом.
А это одна из популярных головоломок XIX века. Даны три стержня, на один из которых нанизаны восемь колец, причём кольца отличаются размером и лежат меньшее на большем. Задача состоит в том, чтобы перенести пирамиду из восьми колец за наименьшее число ходов на другой стержень. За один раз разрешается переносить только одно кольцо, причём нельзя класть большее кольцо на меньшее.
Данный цикл бесконечный, можно долго ждать конца)
Здесь анимацию можно увидеть в самом большом варианте https://dzen.ru/a/ZHjdb9GtjneaaqV7
Две анимации одинаковые, просто расширения разные. Мало ли кто экономит трафик так вот выручу.



