Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD / Основы САПР / AutoLISP2006.doc
Скачиваний:
88
Добавлен:
05.03.2016
Размер:
1.04 Mб
Скачать

9. Организация циклов

Как и многие языки программирования. AutoLISP имеет средства организации повтора выполнения групп операторов. Циклы полезны, например:

для уменьшения числа операторов в программе (в случае повтора однотипных действии)

для повтора выполнения процедуры до отмены ее пользователем

для получения решения математической задачи со сходимостью

для пакетной обработки списков данных (например, при работе с DXF- файлом)

(repeat число выражение1 выражение2 . . . )

Простейшим оператором повтора является оператор RЕРEAT. Эта функция повторяет любое число операторов в выражениях указанное число раз. Возвращается последнее значение последнего выражения цикла.

Например: (setq n 1) (setq fak 1)

(repeat 5

(setq fak (* fak n)) (setq n (+ n 1)) )

Операторы (setq fak (* fak n)) и (setq n (+ n 1)) выполняются 5 раз в следствии чего переменной fak присваивается значение 120 =1*2*3*4*5 .

(while логическое-отношение выражение )

Функция WHILE похожа на функцию REPEAT, однако число повторов не определено, а выход из цикла осуществляется по условию логического отношения. В отличие от структуры IF оператор WHILE не включает в себя выполнение какого-либо выражения в том случае, если логическое отношение принимает значение FALSE. Как COND, REPEAT и PROGN, функция WHILE позволяет включать в свое тело неограниченное число операторов. В начале выполнения каждого цикла проверяется условие логического отношения и если оно равно TRUE (истина), выполняются операторы выражения, после чего опять проверяется условие логического отношения и так до тех пор, пока это условие не станет ложным - примет значение FALSE.

Внимание! Один из операторов выражения цикла WHILE, обязательно должен изменять условие логического отношения Отсутствие этого влияния, может привести к зацикливанию программы. Цикл WHILE возвращает значение последнего вычисленного перед выходом из цикла выражения. Если условие логического отношения изначально было ложным и вхождения в тело цикла не было, WHILE возвращает nil. Цикл WHILE можно использовать также для организации итераций. Итерация - это процесс повторения группы вычислений до тех пор. пока результат вычисления одного или более выражении не станет удовлетворять какому-то условию. Логического отношения итерационного цикла WHILE обычно содержит некоторую переменную, значение кото-рой изменяется в процессе выполнения тела цикла.

Например: (setq str “OK_”) (setq n 0) (setq sp (list “S” “A” “P” “R”))

(while (< n (length sp)) (setq str (strcat str (nth n sp))) (setq n (+ n 1)) )

Переменной str присваивается значение строковой константы “OK_SAPR”.

Еще одним типом функции организатора цикла является функция FOREACH. Это специальное средство AutoLISP, предназначенное для работы со списками.

(foreach имя список выражение)

Эта функция, проходя по списку, присваивает каждому элементу имя и вычисляет каждое выражение для каждого элемента списка. Может быть задано неограниченное число выражений. Возвращается результат последнего вычисленного выражения.

Например: (foreach n ‘(10 20 30) (print (+ n 2))) Фактически будет выполнена печать всех элементов списка увеличенных на 2 - 12 22 32. Функция FOREACH возвращает только значение последнего вычисленного выражения, в данном примере 32.

Соседние файлы в папке Основы САПР