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

2.12. ВЕТВЛЕНИЕ


                      Ветвление – это  способ  управления  ходом  выполнения  программы.
                  AutoLisp имеет две функции ветвления: if и cond.


                      (if тест_выражение выражение_тогда [выражение_иначе])
                      Эта функция использует выражение по условию. Если тест_выражение
                  не    nil,  то  используется          выражение_тогда,  в  противном  случае
                  выражение_иначе.           Последнее        выражение        не     обязательно.        Если
                  выражение_иначе отсутствует и тест_выражение - nil,  то if возвращает nil.
                      Иногда  требуется  по  условию  выполнить  не  одно,  а  несколько
                  выражений,  в  то  время  как  функция if не  позволяет  этого.  В  этом  случае
                  используют функцию
                               (progn выражение_1 выражение_2 … выражение_n),
                  которая  последовательно  вычисляет  каждое  выражение  и  возвращает
                  значение последнего.
                      Пример:
                  (if (= a b)
                        (progn
                                   (princ "\nA = B ")
                                   (setq a (+ a 10) b (- b 10))
                         );progn
                  );if

                      Функция  (cond [(тест            результат ...)  ...])  воспринимает  в  качестве
                  аргументов  любое  число  списков.  Она  оценивает  по  очереди  первые
                  элементы списков до тех пор, пока не встретится элемент, отличный от nil.
                  Затем  вычисляется то  выражение, которое  следует  за  тестом, и  возвращает
                  последнее выражение в подсписке. Если в подсписке только одно выражение
                  (например, результат отсутствует),  то  возвращается  значение  выражения
                  тест.
                      Пример:
                  (cond
                     ((= s "Y") 1)
                     ((= s "y") 1)
                     ((= s "Д") 1)
                     ((= s "д") 1)
                     ((= s "N") 0)
                     ((= s "n") 0)
                     ((= s "Н") 0)
                     ((= s "н") 0)
                     (t nil)
                  );cond
                      Как видно из представленного выше примера, функция cond возвращает
                  нуль  или  единицу  в  зависимости  от  введенной  пользователем  строковой
                  переменной s.




                                                                                                             29
   25   26   27   28   29   30   31   32   33   34   35