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

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


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


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


(write b) ; ошибка b - определена внутри f и не видна на вышестоящем уровне.</pre>
(write b) ; ошибка -- b определена внутри f и не видна на вышестоящем уровне.</pre>


* Локальные переменные затеняют глобальные:
* локальные переменные затеняют глобальные:
<pre>(define a 3)
<pre>(define a 3)


Строка 27: Строка 26:
(f) ; будет напечатано 4, а не 3, так как локальная переменная затенила глобальную.</pre>
(f) ; будет напечатано 4, а не 3, так как локальная переменная затенила глобальную.</pre>


* параметры у многоаргументных функций, суть локальные переменные со всеми вытекающими последствиями:
* параметры у многоаргументных функций суть локальные переменные со всеми вытекающими последствиями:
<pre>(define x 4)
<pre>(define x 4)


Строка 33: Строка 32:
   (write x))
   (write x))


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


'''[[Scheme/Tutorial/6|далее>>]]'''


{{Category navigation|title=Scheme|category=Scheme|sortkey=Tutorial}}
{{Category navigation|title=Scheme|category=Scheme|sortkey=Tutorial}}

Текущая версия от 11:57, 11 мая 2012

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.

далее>>