
- •1) Рекурсия в программировании
- •4) Основы языка Лисп
- •5)Цикл в Лиспе
- •6. Рекурсии в Прологе.
- •7.Факты в Прологе
- •9. Списки в Прологе.
- •10. Списки в Лиспе
- •11. Типы данных Turbo Prolog
- •12. Типы данных в Лиспе
- •13. Опции главного меню.
- •14.Работа с экраном в Лиспе
- •15.Интеллектуальные экспертные системы
- •17)Префиксная нотация.
- •18. Система предикатов
- •21) Элементы структурного программирования
- •22)Факты, вопросы, правила.
- •24) Функции, определенные пользователем
- •26. Ввод-вывод в Лиспе.
- •27) Ввод и вывод в Турбо-Прологе
- •28)Правила в Лиспе
- •30) Функционалы в Лиспе
- •31) Разрушающие функции
- •32. Логические константы в Лисп.
- •33) Управляющая структура cond в Лисп
- •34. Циклы в Лисп
4) Основы языка Лисп
дьэ хуй билэр, это или нет(Мичил партотрах)
К числу основных особенностей языка Лисп относится то,
что программой является несколько определенных пользователем
функций (Приложение А). С точки зрения синтаксиса Лисп-функция,
как и обрабатываемые ею данные, представляет собой так
называемое S-выражение. В простейшем случае S-выражением является
атом (идентификатор или число), в более сложном - список, т.е.
последовательность элементов, разделенных обычно пробелом и заключенных
в круглые скобки. Списки языка Лисп имеют рекурсивную структуру:
элементом списка может быть произвольное S-выражение - как атом,
так и список, например: (1() (a b (c)) class). Некоторые S-выражения
можно вычислять, получая в результате значения (тоже S-выражения);
такие выражения называются формами.
Формой может быть переменная, т.е. атом-идентификатор, которому
было присвоено значение одной из функций Лиспа (значением такой
формы является текущее значение переменной). Формой является
также список-обращение к функции вида(f a1, a2 ... an),
где f - имя функции, а ai - ее аргументы (n?0).
Программа на Лиспе представляет собой последовательность
таких форм, и ее выполнение заключается в их вычислении.
5)Цикл в Лиспе
Нужно ясно понимать, что цикл выполняет двоякую функцию:
Выполнение одного и того же участка программы более одного раза;
Передача управления (под управлением понимается выполняемый в данный момент элемент программы) "назад" или "вверх" (т.е. ближе к началу программы).
Вторая функция цикла менее очевидна, чем первая, хотя в структурных языках и в Лиcпе цикл - единственный способ передать управление назад.
Кстати, если необходимость многократного выполнения участка программы более-менее понятна (например, нам нужно нарисовать сотню окружностей), то необходимость возвратов в программе менее очевидна. Поэтому приведем хотя бы один простейший пример: пользователь вводит данные, программа что-то рисует, а затем пользователь смотрит на результат, ужасается увиденному и очень хочет повторить ввод. Вот здесь и придется возвращаться назад - к тому куску программы, который вводит данные.
Циклы в Лиспе, разумеется, обеспечиваются функциями. Простейшая из них - функция REPEAT вида
6. Рекурсии в Прологе.
По аналогии с математической индукцией, на которую рекурсия немного похожа, любая рекурсивная процедура должна включать в себя базис и шаг рекурсии.
Базис рекурсии - это предложение, определяющее некую начальную ситуацию или ситуацию в момент прекращения. Как правило, в этом предложении записывается некий простейший случай, при котором ответ получается сразу даже без использования рекурсии. Так, в приведенной выше процедуре, описывающей предикат предок, базисом рекурсии является первое правило, в котором определено, что ближайшими предками человека являются его родители. Это предложение часто содержит условие, при выполнении которого происходит выход из рекурсии или отсечение.
Шаг рекурсии - это правило, в теле которого обязательно содержится, в качестве подцели, вызов определяемого предиката. Если мы хотим избежать зацикливания, определяемый предикат должен вызываться не от тех же параметров, которые указаны в заголовке правила. Параметры должны изменяться на каждом шаге так, чтобы в итоге либо сработал базис рекурсии, либо условие выхода из рекурсии, размещенное в самом правиле. В общем виде правило, реализующее шаг рекурсии, будет выглядеть так:
<имя определяемого предиката>:-
[<подцели>],
[<условие выхода из рекурсии>],
[<подцели>],
<имя определяемого предиката>,
[<подцели>].