Существуют ли языки программирования без глобальных переменных?

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

>>> x = 3
>>> def fact(n):
...     print x
...     return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...     

выдаст ошибку, потому что x не определен внутри функции fact ?

В общем случае есть ли языки, в которых объем любой функции не будет включать в себя функции, определенные в нем?

Изменить : Спасибо за информативные комментарии. объектно-ориентированные языки - это они получил всю эту неявную среду, которая они носят с собой. Вы хотел банан, но у тебя был горилла держит банан и целые джунгли.

Также важно то, что я слышал, что язык новояз не имеет глобального пространства имен, хотя я понятия не имею, как это работает.

Я могу представить себе проблему, поднятую в Комментарий Брайана о встроенных функциях (функции, импортированные из __ builtins __ в Pythonspeak или System на многих других языках) искусственно вводятся интерпретатором / компилятором в каждую функцию. В конце концов, к ним почти всегда обращаются специально на языке. Другой вариант - использовать их как методы объекта, передаваемые в качестве параметра функции или импортированные как модуль изнутри.

9
задан Yardena 24 December 2010 в 23:14
поделиться