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