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

2.13. ЦИКЛЫ


                      AutoLisp имеет  средства  для  организации  повтора  выполнения  групп
                  операторов.
                      Простейшей функцией организации циклов является функция
                           (repeat число выражение_1 выражение_2 … выражение_n),
                  которая  повторяет  любое  число  операторов  указанное  число  раз.
                  Возвращается последнее значение последнего выражения.
                      Пример:
                  (setq x 0 s 0)
                  (repeat 100 (setq x (1+ x)) (setq s (+ s x)))
                      В примере показано, как при помощи функции repeat можно вычислить
                  сумму чисел от 1 до 100. Сумма находится в переменной s.
                      Функция while похожа на функцию repeat, но отличается тем, что число
                  повторов  не  определено,  а  выход  из  цикла  осуществляется  по  условию.
                  Синтаксис функции следующий
                  (while тест_выражение выражение_1 выражение_2 … выражение_n)
                      Пример:
                  (setq x 0 s 0)
                  (while (< x 100) (setq x (1+ x)) (setq s (+ s x)))
                      Специальным  средством AutoLisp для  работы  со  списками  является
                  функция foreach (буквально – "для каждого"):
                  (foreach имя список выражение_1 выражение_2 … выражение_n).
                      Эта функция, проходя по списку, присваивает каждому элементу имя и
                  вычисляет  каждое  выражение  для  каждого  элемента  списка. Возвращается
                  результат последнего вычисленного выражения.
                      Пример:
                  (foreach n '(A B C) (print n))
                      Представленный пример эквивалентен записи
                  (print     A)
                  (print     B)
                  (print     C)
                  с  той  разницей,  что foreach возвращает  только  значение  последнего
                  вычисленного выражения.
                      Функция  (apply         функция список)  выполняет функцию с  аргументом,
                  заданным списком.
                      Пример:
                  (apply '+ '(1 2 3))                      ; Возвращает 6
                  (apply 'strcat '("a" "b" "c")) ; Возвращает строку "abc"


                      Для  выполнения  какой-либо  одной  операции  над  всеми  элементами
                  одного или нескольких списков служит функция
                  (mapcar функция список_1 список_2 … список_n)
                      Пример:
                  (setq a 10 b 20 c 30)
                  (mapcar '1+ (list a b c)) ; Все элементы списка увеличиваются
                                                     ;на единицу, возвращается список  (11 21 31)



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