Средства разработки приложений



              

Базовые принципы языка Scheme - часть 2


В языке Scheme поддерживается ряд выражений, позволяющих расширять активное окружение новыми связываниями путем создания новых местоположений и связывания переменных с созданными местоположениями. Такие выражения называются связывающими (binging constructs). Фундаментальным связывающим выражением является лямбда-выражение (выражение, позволяющее создать новую функцию); все остальные связывающие выражения вводятся как макросы, определяемые через лямбда-выражение.

Как и большинство языков программирования, язык Scheme имеет блочную структуру. То есть связывания, добавляемые связывающим выражением, расширяют активное окружение только для тела связывающего выражения. При этом добавляемые связывания перекрывают связывания одноименных переменных, которые были добавлены внешними связывающими выражениями. В последующих разделах содержится большое количество примеров использования лямбда-выражений для создания новых связываний, расширяющих активное окружение.

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

Язык Scheme является динамически (или слабо) типизированным языком. При динамической типизации, в отличие от статической (или сильной) типизации, тип ассоциируется со значением, а не с переменной.

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


Содержание  Назад  Вперед