Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЛП.doc
Скачиваний:
14
Добавлен:
24.09.2019
Размер:
478.72 Кб
Скачать

Вопрос 14) Метод отката после неудачи Prolog

Откатом называется возобновление исполнения процесса, начиная с последней (неустранённой оператором отсечения) точки выбора. Откат выполняется автоматически в случае неудачи какой-либо операции, осуществляемой в ходе исполнения предложения. В результате отката программы осуществляется восстановление состояний акторов процесса, в котором произошёл откат, на момент прохождения последней (неустранённой оператором отсечения) точки выбора (в том числе отмена всех связываний и сцеплений переменных, произошедших в акторах с момента прохождения этой точки, отмена нейтрализации и повторных доказательств акторов, а также отмена всех изменений, внесённых в список задержанных подцелей).

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

Суть этого механизма, механизма отката, такова: в том месте программы, где возможен выбор нескольких вариантов, Пролог сохраняет в специальный стек точку возврата для последующего возвращения в эту позицию. Точка возврата содержит информацию, необходимую для возобновления процедуры при откате. Выбирается один из возможных вариантов, после чего продолжается выполнение программы. Во всех точках программы, где существуют альтернативы, в стек заносятся указатели. Если впоследствии окажется, что выбранный вариант не приводит к успеху, то осуществляется откат к последней из имеющихся в стеке точек программы, где был выбран один из альтернативных вариантов. Выбирается очередной вариант, программа продолжает свою работу. В методе отката после неудачи обычно используется всегда ложный предикат fail, о котором говорилось в прошлой лекции. Хотя, по большому счету, вместо этого предиката можно воспользоваться каким-нибудь заведомо ложным выражением. Например, 1=2 или чем-то в этом роде. Если все варианты в точке уже были использованы, то регистрируется неудачное завершение и осуществляется переход на предыдущую точку возврата, если такая есть. При откате все связанные переменные, которые были означены после этой точки, опять освобождаются.

Вопрос 15) Основы языка lisp. Символьные выражения: атомы и списки. (Lisp)

Лисп относиться к декларативному стилю, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать.

Одним из путей развития декларативного стиля программирования стал функциональный подход, возникший с появлением и развитием языка LISP.

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

Сложные программы при таком подходе строятся посредством агрегирования функций. При этом текст программы представляет собой функцию, некоторые аргументы которой можно также рассматривать как функции. Таким образом, повторное использование кода сводится к вызову ранее описанной функции. Более того, типы отдельных функций, используемых в функциональных языках, могут быть переменными. Таким образом обеспечивается возможность обработки разнородных данных (например, упорядочение элементов списка по возрастанию для целых чисел, отдельных символов и строк) или полиморфизм. Еще одним важным преимуществом реализации языков функционального программирования является автоматизированное динамическое распределение памяти компьютера для хранения данных. При этом программист избавляется от рутинной обязанности контролировать данные, а при необходимости может запустить функцию «сборки мусора» – очистки памяти от тех данных, которые больше не потребуются программе (обычно этот процесс периодически инициируется компьютером).

Аббревиатура LISP расшифровывается как LIST PROCCESSOR или по-русски: обработчик списков. Список, пожалуй, базовое понятие в лиспе.

Основная структура данных в Лиспе - символьные или S-выражения, которые определяются как атомы или списки.

Символы и числа представляют собой те объекты Лиспа, из которых строятся остальные структуры. Поэтому их называют атомами.

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

Пример: х, г-1997, символ, function.

Числа не являются символами, так как число не может представлять иные лисповские объекты, кроме самого себя. В Лиспе используется большое количество различных типов чисел (целые, десятичные и т. д.) - 24, 35.6, 6.3 e5.

Символы T и NIL имеют в Лиспе специальное назначение: T обозначает логическое значение истина, а NIL - логическое значение ложь. Символы T и  NIL имеют всегда одно и тоже фиксированное встроенное значение. Их нельзя использовать в качестве имен других лисповских объектов. Символ NIL обозначает также и пустой список.

Список - это упорядоченная последовательность, элементами которой являются атомы или списки (подсписки). Списки заключаются в круглые скобки, элементы списка разделяются пробелами. Открывающие и закрывающие скобки находятся в строгом соответствии. Список всегда начинается с открывающей и заканчивается закрывающей скобкой. Список, который состоит из 0 элементов называют пустым и обозначают () или NIL. Пустой список - это атом.

Например:

( (12 36 78) йцукен qwerty t () another-symbol)

Здесь приведен список состоящий соответственно из другого списка: (12 36 78) из символов йцукен и qwerty, специальных  символов  t (обозначающего "истинность") и () - (пустой список, то есть не содержащий ни одного элемента, он еще обозначает "ложь") и еще одного символа по имени enother-symbol.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]