Page 23 - AutoLISP и Visual LISP в среде AutoCAD
P. 23

2.8.2. ГЛОБАЛЬНЫЕ И ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ


                      Все переменные AutoLisp делятся на два вида: глобальные и локальные.
                      Глобальные  переменные  постоянно  находятся  в  оперативной  памяти  и,
                  следовательно,  доступны  из  любой  функции.  Глобальные  переменные
                  создаются автоматически при присвоении им значения.
                      Локальные переменные явно описываются в заголовке функции defun и
                  видны только внутри соответствующей пользовательской функции. В начале
                  работы  пользовательской  функции  локальные  переменные  имеют  значение
                  nil.  По  окончании  работы  этой  функции  они  автоматически удаляются  из
                  памяти.
                      Аргументы  пользовательских  функций  также  являются  локальными
                  переменными.  В  начале  работы  пользовательской  функции  аргументы
                  принимают значения, переданные функции при ее вызове.
                      Использование  глобальных  переменных  крайне  нежелательно. Они
                  занимают память; вызывают необходимость отслеживания имен переменных
                  (а    локальных       переменных         с    одинаковыми         именами       в    разных
                  пользовательских  функциях  мажет  быть  сколько  угодно).  Данные  следует
                  хранить в локальных переменных и передавать через параметры вызываемых
                  функций.
                      Если  глобальные  переменные  все  же  используются,  как  только
                  необходимость  в  них  отпадает,  следует  освобождать  занимаемую  ими
                  память, присваивая им значение nil.
                      Пользовательская  функция  может  не  иметь  как  локальных  переменных,
                  так  и  аргументов.  В  любом  случае  пара  скобок  после  имени  функции
                  сохраняется.

                      Примеры:
                  (defun fun1 (a b / c d) ….)
                  (defun fun2 (a b) …..)
                  (defun fun3 (/ c d) …)
                  (defun fun4 ( ) ….)


                      Использование  локальных  параметров  покажем  на  примере.  Требуется
                  вычислить  площадь треугольника,  если  известны  длины  всех  его  сторон.
                  Воспользуемся теоремой Герона:
                                                     S =   p ( p -  a )( p - b )( p -  ) c ,
                           a + b +  c
                  где p =           .
                               2
                      Назовем  функцию Geron.  Ее  аргументами  будут  стороны  треугольника.
                  Переменная        p   служит  лишь  для  временного  хранения  значения
                  полупериметра, поэтому будет локальной.


                  (defun Geron (a b c / p)
                      (setq p (/ (+ a b c) 2.0))
                  (sqrt (* p (- p a) (- p b) (- p c)))
                  ) ; конец функции


                  22
   18   19   20   21   22   23   24   25   26   27   28