Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Пример программирования на Лиспе
Рассмотрим в качестве примера программирования на Лиспе менее элементарную классическую задачу, носящую название игры в «ханойские башни». Игра состоит в следующем. Используются три вертикальных стержня А, В, С и набор N дисков разного диаметра с отверстием посередине (так что их можно надевать на стержни). В начальном положении все диски надеты на стержень А по порядку убывания диаметров: внизу самый большой, над ним - поменьше и т.д., а наверху - самый маленький. Целью является перенос всех дисков со стержня А на стержень В по следующим правилам: 1) за один раз можно перенести только один диск; 2) больший по размеру диск нельзя положить на меньший; 3) третий стержень С можно использовать как вспомогательный. Алгоритм решения задачи можно представить в виде трех следующих рекурсивных подзадач: 1) перенести со стержня А N-1 дисков на вспомогательный стержень С; 5) перенести нижний диск со стержня А на стержень В; 6) перенести со стержня С N-1 дисков на стержень В. Программа состоит из трех последовательно определяемых функций «ханойские-башни», «перенос», «выведи» и имеет вид: Программа 130 (defun ханойские-башни (высота) (рrоgn (перенос "а "Ь "с высота) "готово)) ХАНОЙСКИЕ-БАШНИ (defun перенос (из в вспомогательный n) (cond ((= п 1); ветвь 2 (выведи из в) (t (перенос из; ветвь1 вспомогательный в (- n 1)) (выведи из в) (перенос вспомогательный; ветвь 3 в из (- п 1))))) ПЕРЕНОС (defun выведи (из в) (format t "~S -> ~S~%"из в)) ВЫВЕДИ
Вызов функции «ханойские башни» дает такое решение: (ханойские-башни 3) А->В А->С В->C А->В С->А С->В А->В ГОТОВО
Можно убедиться, что определенная нами функция дает правильное решение для произвольного числа дисков, однако время решения задачи с увеличением числа дисков быстро возрастает.
Date: 2015-11-13; view: 357; Нарушение авторских прав |