Вызов функции | MetodPro.ru

Реклама на сайте

Вызов функции


Правило трансляции вызова функции можно представить следующим образом:

(e e1 … ek)→(LDC NIL)   (CONS) … (CONS) (AP)  

Чтобы скомпилировать код для вызова функции, сначала необходимо собрать вместе аргументы e1 … ek и поместить их в стек в качестве списка значений v. Для этого в стек командой (LDC NIL) помещается пустой список, затем компилируется последний аргумент ek в исходном окружении (начиная с последнего и заканчивая первым) и помещается командой CONS в пустой список. Аналогично обрабатываются остальные аргументы вплоть до e1.

После создания списка аргументов в стек помещается тело функции, имя которой e в данный момент определено. Результатом трансляции имени функции является команда LD с индексной парой, по которой в стек по имени функции будет загружаться ее замыкание.

Список команд завершается командой AP, которая необходима для вычисления тела функции e из замыкания с учетом имеющихся аргументов.

Рассмотрим пример:

e=(DOUBLE (QUOTE 7))

σ=((LAMBDA (X) (MUL X (QUOTE 2))))

= (DOUBLE(QUOTE 7))=1

    (LDC NIL) (QUOTE 7)(CONS) DOUBLE (AP)=

      (LDC NIL LDC 7 CONS LD (0 0) AP)



Методические пособия

  • Системы автоматизированного проектирования
  • Социология молодёжи
  • Общая социология
  • Криптография
  • Проектирование трансляторов
  • Компьютерная графика
  • Моделирование систем
  • Информационная безопасность
  • Теория вычислительных процессов
  • Логические основы искусственного интелекта
  • Проектирование распределённых информационных систем