Существуют ли языки, в которых область действия определена таким образом, что не распространяется на вложенные функции? Другими словами, есть ли язык, где код похож на следующий (Python-подобный синтаксис):
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
выдаст ошибку, потому что x не определен внутри функции fact
?
В общем, существуют ли языки, в которых область действия любой функции не будет включать функции, определенные в ней?
Редактировать : Спасибо за содержательные комментарии. Причина, по которой я подумал об этом, заключается в том, что ситуация внутренней функции, имеющей доступ ко всей среде, обеспечиваемой ее содержащими функциями, кажется мне подозрительно близкой к ситуации, описанной Джо Армстронгом в его аргументе против ООП :
Потому что проблема с
объектно-ориентированные языки
получил всю эту неявную среду, которая
они носят с собой. Вы
хотел банан, но то, что вы получили, было
горилла держит банан и
целые джунгли.
Также важно, что я слышал, что язык Newspeak не имеет глобального пространства имен, хотя я понятия не имею, как он работает.
Я могу представить себе проблему, поднятую в комментарии Брайана ниже, о встроенных функциях (функции, импортированные из __builtins__
в Pythonspeak или System во многих других языках), которые искусственно вводятся интерпретатором / компилятором в каждую функцию. Ведь с ними почти всегда обращаются специально на языке в первую очередь. Другой вариант - использовать их как методы объекта, передаваемого в качестве параметра функции или импортированного как модуль изнутри.