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

4) Основы языка Лисп

дьэ хуй билэр, это или нет(Мичил партотрах)

К числу основных особенностей языка Лисп относится то,

что программой является несколько определенных пользователем

функций (Приложение А). С точки зрения синтаксиса Лисп-функция,

как и обрабатываемые ею данные, представляет собой так

называемое S-выражение. В простейшем случае S-выражением является

атом (идентификатор или число), в более сложном - список, т.е.

последовательность элементов, разделенных обычно пробелом и заключенных

в круглые скобки. Списки языка Лисп имеют рекурсивную структуру:

элементом списка может быть произвольное S-выражение - как атом,

так и список, например: (1() (a b (c)) class). Некоторые S-выражения

можно вычислять, получая в результате значения (тоже S-выражения);

такие выражения называются формами.

Формой может быть переменная, т.е. атом-идентификатор, которому

было присвоено значение одной из функций Лиспа (значением такой

формы является текущее значение переменной). Формой является

также список-обращение к функции вида(f a1, a2 ... an),

где f - имя функции, а ai - ее аргументы (n?0).

Программа на Лиспе представляет собой последовательность

таких форм, и ее выполнение заключается в их вычислении.

5)Цикл в Лиспе

Нужно ясно понимать, что цикл выполняет двоякую функцию:

Выполнение одного и того же участка программы более одного раза;

Передача управления (под управлением понимается выполняемый в данный момент элемент программы) "назад" или "вверх" (т.е. ближе к началу программы).

Вторая функция цикла менее очевидна, чем первая, хотя в структурных языках и в Лиcпе цикл - единственный способ передать управление назад.

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

Циклы в Лиспе, разумеется, обеспечиваются функциями. Простейшая из них - функция REPEAT вида

6. Рекурсии в Прологе.

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

Базис рекурсии - это предложение, определяющее некую начальную ситуацию или ситуацию в момент прекращения. Как правило, в этом предложении записывается некий простейший случай, при котором ответ получается сразу даже без использования рекурсии. Так, в приведенной выше процедуре, описывающей предикат предок, базисом рекурсии является первое правило, в котором определено, что ближайшими предками человека являются его родители. Это предложение часто содержит условие, при выполнении которого происходит выход из рекурсии или отсечение.

Шаг рекурсии - это правило, в теле которого обязательно содержится, в качестве подцели, вызов определяемого предиката. Если мы хотим избежать зацикливания, определяемый предикат должен вызываться не от тех же параметров, которые указаны в заголовке правила. Параметры должны изменяться на каждом шаге так, чтобы в итоге либо сработал базис рекурсии, либо условие выхода из рекурсии, размещенное в самом правиле. В общем виде правило, реализующее шаг рекурсии, будет выглядеть так:

<имя определяемого предиката>:-

[<подцели>],

[<условие выхода из рекурсии>],

[<подцели>],

<имя определяемого предиката>,

[<подцели>].

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