Scheme/Tutorial/5: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 4: Строка 4:
В Scheme применяется привычный всем подход к областям видимости переменных (так называемый Lexical Scope):
В Scheme применяется привычный всем подход к областям видимости переменных (так называемый Lexical Scope):


  * Переменные определённые внутри некоторой функции видны во всех функциях, определённых внутри данной, но не видны вне её.
  * Переменные определённые внутри некоторой функции видны во всех функциях,
определённых внутри данной, но не видны вне её.
<pre>(define a 3)
<pre>(define a 3)



Версия от 19:22, 15 июля 2009

11 Локальные переменные

Проведём небольшое усовершенствование своих познаний по Scheme.

В Scheme применяется привычный всем подход к областям видимости переменных (так называемый Lexical Scope):

* Переменные определённые внутри некоторой функции видны во всех функциях,

определённых внутри данной, но не видны вне её.

(define a 3)

(define (f)
   (define b 4)
   (define (g)
      (write b)) ; мы видим эту переменную так как g сама определена внутри f
   (g)
   (write a) ; мы видим эту переменную ибо она в охватывающем окружении
   (write b)) ; это наша локальная переменная

(write b) ; ошибка b - определена внутри f и не видна на вышестоящем уровне.
* Локальные переменные затеняют глобальные:
(define a 3)

(define (f)
   (define a 4)
   (write a))

(f) ; будет напечатано 4, а не 3, так как локальная переменная затенила глобальную.
  • параметры у многоаргументных функций, суть локальные переменные со всеми вытекающими последствиями:
(define x 4)

(define (f x)
   (write x))

(f 5) ; будет напечатано 5, а не 4 ибо x - локальная переменная в функции f.