Информатика -продвинутый курс


ФОРМЫ. УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ В ЛИСП-ПРОГРАММЕ


 

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

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

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

работа с контекстом

• QUOTE или блокировка вычисления,

• вызов функции и лямбда-вызов,

• предложения LET и LET*;      

последовательное исполнение

• предложения PROG1, PROG2 и PROGN;

разветвление исполнения

• условные предложения COND, IF, WHEN, UNLESS,

• выбирающее предложение CASE;

итерации

циклические предложения DO, DO*, LOOP, DOTIMES, DOUNTIL;

передачи управления

• предложения PROG, GO и RETURN;

динамическое управление вычислением

THROW, CATCH, а также BLOCK.

Эти управляющие формы (кроме QUOTE и лямбда-вызова, а также вызовов функций), в основном, используются в теле лямбда-выражений, определяющих функции.

Предложение LET используется для создания связи переменных внутри формы:

 

(LET ((пep1 знач1) (пер2 знач2)...) форма1 форма2 ...).

 

При вычислении этого выражения статические переменные пep1, пер2, ... связываются (одновременно) с соответствующими значениями знач1, знач2, ..., а затем вычисляются значения форм форма1, форма2, ... Значение последней формы возвращается как общий результат. Форма LET* отличается от LET лишь тем, что связывание переменных и вычисление форм происходит не одновременно, а последовательно, вначале 1-е, потом 2-е и т.д.

Например:

 

(let*((x2)(y(*3x)))

(list x у)

Результат: (2 6).

 

Предложения PROG1, PROG2 и PROGN позволяют организовывать последовательные вычисления из нескольких вычисляемых форм:




Начало  Назад  Вперед