- •; Програма 3. Квадрат з вписаним колом
- •Підпрограми, розгалуження і цикли. Логічні функції. Функції while і if.
- •; Програма 4. Обчислення тангенса
- •; Програма 5. Побудова сімейства квадратів:
- •2.5. Використання програм мовою Автолісп при роботі в системі AutoCad
- •3.5. Програмування керуючих структур. Функції cond, progn, repeat
3.5. Програмування керуючих структур. Функції cond, progn, repeat
Розвитий мова програмування повинна забезпечувати реалізацію керуючих структур типу "розгалуження" і "цикл". Такі структури реалізуються на Автоліспі за допомогою функцій IF і WHILE (див. п.2.4). Функції, розглянуті нижче, розширюють можливості програмування керуючих структур.
Функція COND реалізує керуючу структуру ВИБІР з декількох варіантів дій і дозволяє замінити використання багаторазово вкладених IF.
(COND (<умова1> < вираз1!>...)...)
Тут < вираз > - будь-яка послідовність функцій Автоліпа.
Функція реалізується в такий спосіб: обчислюється <умова1> і, якщо воно виконується, те обчислюється <вираз1>. На цьому функція роботу закінчує, повертаючи значення останнього виразу. Але якщо <умова1 > не виконується, те цей вираз обчислюватися не буде. Тоді функція COND переходить до перевірки наступнї <умови 2> і т.д., тобто буде виконаний тільки той вираз, який випливає за першою умовою, що виконується.
Приклад:
(COND ((> А 0) (SETQ У "PLUS"))
((= А 0) (SETQ У "ZERO"))
((< А 0) (SETO У "MINUS"))
(Т NIL)
)
Якщо перед виконанням цієї функції в змінну А було записано позитивне число, то в результаті обчислення функції в У буде записаний текст "PLUS", функція поверне "PLUS". Аналогічно відпрацьовують випадки, коли виявиться, що А=0 і А<0. Якщо ж А взагалі не число, то функцію, яка виконується, COND знайде в останньому рядку. При цьому ніяких дій здійснено не буде, функція поверне NIL.
Функція PROGN є допоміжною для конструювання функції IF. Нагадаємо, що функція IF записується так:
(IF <умова> <функція1> [<функція2>])
Часто виявляється необхідним, щоб при виконанні <умови> обчислювалася не одна <функція1 >, а послідовність функцій. Це і дозволяє зробити PROGN.
(PROGN <функція>...)
Функція PROGN поєднує послідовність функцій у "макрофункцію". PROGN повертає значення останньої функції в послідовності.
Приклад:
(IF(> = А 0)
(PROGN (SETO B (/ 1 А))
(SETQ C (SQRT B) )
(SETQ У "А <= 0")
)
Тут, якщо А > =0, обчислюються В и С ( і повертається значення С), інакше повертається текст "А< =0". Без функції PROGN таку конструкцію не удалося б реалізувати.
Функція REPEAT дозволяє реалізувати цикл у деяких специфічних ситуаціях більш зручно, чим функція WHILE, а саме тоді, коли заздалегідь відоме число кроків циклу:
(REPEAT <число < вираз >)
Тут < число> повинне мати ціле позитивне значення. Вираз обчислюється задане число раз. Повертається значення останньої виконаної функції.
Приклад:
(SETQ STR "МАТЕРІАЛ:")
(REPEAT 3 (SETQ S (GETSTRING))
(SETQ STR (STRCAT STR S))
)
Тут тричі з клавіатури вводяться текстові рядки, що "зчіплюються" з початковим рядком "МАТЕРІАЛ".
