- •1Базовые функции обработки списков.
- •2Определение и вызов функций с помощью λ-выражений. Λ-список, λ-преобразование. Свободные и связанные переменные. Функция defun
- •3Локальные определения (форма let).
- •4Функции более высокого порядка. Функциональный аргумент, функциональное значение. Способы композиции функций.
- •5Автоматическое управление памятью в Лиспе. «Сборка мусора».
- •11Какую (двоякую) роль играет в Лиспе функция eval?
- •12Возвращение функцией нескольких величин.
- •13Базовые функции Лиспа.
- •14Опишите три варианта предиката равенства в Лиспе.
- •1Равенство в Прологе.
- •2Встроенные предикаты. Предикаты взаимодействия.
- •4Аппарат вычислений. Обработка списков.
- •5Аппарат вычислений. Рекурсивные определения в Прологе.
- •6Аппарат вычислений. Управление откатом: отсечение.
- •7Аппарат вычислений. Поиск в глубину с возвратом.
- •8Аппарат вычислений. Вывод и процедура отката.
- •9Аппарат вычислений. Процедура унификации в Прологе.
- •10Синтаксис данных (термы и основные объекты Пролога).
- •11Структура программы в языке Пролог (синтаксис языка).
- •12Логическая и управляющая компоненты Пролога.
- •14Общая характеристика языка Пролог.
1Равенство в Прологе.
В Прологе существует особый предикат равенство, являющийся инфиксным оператором, обозначаемым литерой '='. Когда делается попытка доказать согласованность с базой данных целевого утверждения
?- X = Y.
(произносится X равно Y), Пролог пытается установить соответствие между X и Y ; целевое утверждение «доказуемо», если такое соответствие имеется. Это действие можно представить себе как попытку сделать X и Y равными. Предикат равенства является встроенным, т. е. он уже определен в Пролог-системе. Предикат равенства работает так, словно определен следующий факт: X = X.
Внутри всякого утверждения X всегда равно X , и это свойство использовано нами при определении предиката равенства.
При согласовании с базой данных цели вида X = Y , где X и Y – любые термы, в которых могут содержаться неконкретизированные переменные, действуют следующие правила:
• если X представляет собой неконкретизированную переменную, а переменная Y конкретизирована (какое именно значение ей дано, неважно), то X и Y равны. Кроме того, X станет конкретизированной – ей будет дано то же значение, что и Y .
2Встроенные предикаты. Предикаты взаимодействия.
Встроенными предикатами называются предикаты, определенные в самой системе ПРОЛОГ и предназначенные для обработки, размещения и управления данных, а также для организации взаимодействия пользователей с ПРОЛОГом.
В описании встроенных аргументов (built—in argument) операция выполняется согласно следующему правилу, символ “+” перед обозначает исходный аргумент, “-” обозначает итоговый аргумент, “?” обозначает исходный или итоговый аргумент, “@” обозначает исходный аргумент, который должен быть несвободным (связанным).
4Аппарат вычислений. Обработка списков.
Список — это тип данных, представляющих собой набор значений. Как и другие не стандартные типы, список в прологе объявляется в разделе domains. В прологе, список может содержать значения лишь одного типа, этот тип указывается при объявлении типа списка. Для помещения чисел в список, их необходимо ограничить квадратными скобками и разделить запятыми. При обработке, список разделяется на голову(первый элемент списка) и хвост(все элементы, кроме первого), отделяя таким образом элементы, можно обойти весь список. Для отделения головы списка используется символ вертикальной черты.
Проверяет принадлежность элемента списку. member(X, L)
Используется для соединения двух списков. т.е append (L1, L2, L3)
Можно, используя рекурсивный вызов, легко посчитать длину списка: length([], 0). ?-length([a, b, c], N). N=3
5Аппарат вычислений. Рекурсивные определения в Прологе.
Рекурсивное определение в программе также делится на две части. Одна из них соответствует рекуррентным формулам и состоит из правил, в теле которых присутствует целевое утверждение с тем же предикатом, что и заголовок правила, т.е. из правил, рекурсивно вызывающих самих себя. Другая часть содержит утверждения, описывающие терминальную ситуацию, т.е. ситуацию, в которой рекурсивное обращение предиката к самому себе прекращается. В качестве терминальной ситуации выбирается одно из граничных условий. Обычно терминальная ситуация является первым утверждением в определении. В этом случае вот что происходит при выполнении (см. пример 1):
• оценивается первое утверждение в рекурсивном определении;
• если первое утверждение не выполняется, осуществляется переход к следующему в определении утверждению, и оно оценивается. Обычно это правило, которое содержит условие, начинающее рекурсию;
• после прохождения первого уровня рекурсии выполнение возвращается к первому утверждению в определении и опять оценивается его истинность;
• если оценивание первого утверждения заканчивается неудачей, выполнение переходит ко второму в определении утверждению и входит во второй уровень рекурсии. Этот процесс продолжается до тех пор, пока первое утверждение (содержащее терминальную ситуацию) не выполнится и, таким образом, сделает определение успешным и остановит рекурсию.
В зависимости от того, как осуществляется переход от соотношений (1) к программе, различают два разных стиля рекурсивных определений: нисходящая рекурсия и восходящая рекурсия.