Стили и методы программирования


Модель вычислений LISP


Для LISP (как и для любого другого функционального языка) не обязательно2) говорить, где и как размещаются структуры данных (списки).

Структура информации, сопоставленной атому языка LISP

Рис. 8.1.  Структура информации, сопоставленной атому языка LISP

Их стоит рассматривать как сугубо математические объекты со сложной структурой, которая всегда точно указывает на текущие вычислительные элементы:

  1. До выполнения шага вычисления — это список, включающий имя функции и ее аргументы.
  2. Во время выполнения шага вычисления — это те фрагменты списочной структуры поля зрения, которые доступны для использования вычисляемой функцией (в частности, среди них есть список, связанный с именем функции, который определяет ее вычислительный процесс).
  3. После выполнения шага вычислений — это результаты вычислений. Результаты можно разделить на три группы:
    • значение, выдаваемое вызовом функции: оно замещает в поле зрения отработанный вызов функции;
    • побочные эффекты, разбросанные по структуре поля данных;
    • очередная функция, которая будет вычисляться далее. В традиционном программировании обычно возвращаются к вычислениям той функции, которая активизировала завершаемую. В функциональном программировании может быть и по-другому. Результат может оказаться функцией, либо описанной в статическом тексте программы, либо скомпонованной в ходе вычислений.

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

Конкретизировать такой граф и стратегию отработки активных вершин можно разными способами.


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