Линейный блок и Функциональный блок, Чем отличается? - PullRequest
1 голос
/ 13 июня 2011

В теории языка программирования

Блок, связанный с фреймом стека, имеет два вида.Встроенный блок и функциональный блок.

Чем отличается Встроенный блок и функциональный блок ?

И предположим, что есть кодниже.

int x = 1;
g(z) = z + x;

Согласно встроенному блоку, является ли функция g вложенной в переменную x?

1 Ответ

1 голос
/ 13 июня 2011

Функциональный блок:
void func () {...};// в c или c ++

(defun func ...) // в clisp

fun func () = ... // в мл

Функциональный блокэто блок, который оборачивает функцию.
В Си, когда функция возвращается, записи активации функции удаляются из стека.
однако, в функциональном языке, таком как ML, CLISP, возврат функции не всегда означает удалениекадр стека.
Поскольку эту функцию можно использовать позже.

Встроенный блок - это блок, который показывает вложенную структуру.

int x = 1;  
g(z) = z + x;

Когда функция g использует встроенный блок, функция g принимает переменную x как 1. функция g не знает значение x только с записью активации функции g.однако причина, по которой функция g может узнать значение x, заключается в том, что она использует статическую ссылку, а статическая ссылка указывает на ближайший блок вложенности.

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

...