ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Области видимости

Сообщений 1 страница 3 из 3

1

"Если, например, все имена хранить в глобальном контексте, то мы не можем позволить себе рекурсию.
Если полностью изолировать глобальный контекст и контекст функции, т.е. в функции искать переменные только локально, — создаём кучу неудобств.
Если разрешаем видеть глобальные переменные из функции, то
— приходится изобретать способы различения — где имя глобальное, а где локальное (по-яваскриптовски, var локальное, иначе глобальное; или по-питоньи, global глобальное, есть присваивание — локальное, иначе хитровывернутый поиск)
— приходится изобретать правила для вложенных функций, вложенных блоков, замыканий, циклов и т.д."

0

2

то мы не можем позволить себе рекурсию.

Можем (но не всю). Scheme умеет автоматически преобразовывать хвостовую рекурсию в цикл. Преобразования остальных рекурсий в цикл не известны. Но доказательств отсутствия такого преобразования не существует.

создаём кучу неудобств.

Которые почему то не указаны. Вообще то там одни плюсы.

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

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

Отредактировано utkin (2017-10-27 20:54:25)

0

3

utkin написал(а):

Scheme умеет автоматически преобразовывать хвостовую рекурсию в цикл. Преобразования остальных рекурсий в цикл не известны. Преобразования остальных рекурсий в цикл не известны.

Разница лишь в необходимости тянуть данные.

0