Програма 4. Обчислення тангенса
(DEFUN TAN (А / S С) ; Заголовок функції ; А - аргумент функції - кут, S, С - локальні
; змінні
(SETQ S (SIN A))
(SETQ C (COS A))
(IF (/= С 0.0) (/ S С) "нескінченність")
) ; Кінець функції
Тут, якщо С не дорівнює нулеві, обчислюється тангенс (і значення тангенса буде повернуто функцією). Якщо ж С дорівнює нулеві, то тангенс не обчислюється, а функція повертає рядок "нескінченність" - це слово і з'явиться на екрані.
Цикл в Автоліспі організується за допомогою функції WHILE.
(WHILE <умова> < вираз >...)
Тут < умова > - це вираз, який в деяких ситуаціях може приймати значення NIL.
Функція WHILE обчислює значення умови і, якщо воно не NIL, обчислює вираз, потім знову умова і т.д. Це продовжується, поки умова не стане дорівнює NIL. Потім WHILE повертає останнє значення останнього виразу. Таким чином, функція WHILE відповідає структурі псевдокоду ПОКИ - ЦИКЛ.
Наведена нижче Програма 5 ілюструє використання циклу, що дозволяє компактно записати побудову складного зображення: будується сімейство з 20 квадратів, кожний з яких повернутий на кут 0.1 * РІ щодо попередніх і має периметр у 0.9 разів менше попереднього. Для побудови 20 замкнутих ліній використовується всього одна команда LINE
; Програма 5. Побудова сімейства квадратів:
; Введення вихідних даних (опис функції)
(DEFUN ID ( ); Заголовок функції
(SETQ PI (GETPOINT "\n Початкова точка:"))
(SETQ L (GETDIST P1 “ Початкова довжина:"))
)
; Побудова одного квадрата:
(DEFUN QUADR (L A /P2 P3 P4) ; Заголовок функції
;Тут Р2, РЗ, Р4 оголошені як локальні
;змінні
(SETQ P2 (POLAR PI A L))
(SETQ РЗ (POLAR P2 ( + А (/ PI 2)) L))
(SETQ P4 (POLAR P3 ( + A PI) L))
(COMMAND "LINE" PI P2 P3 P4 "C")
)
; Побудова сімейства квадратів:
(DEFUN QN () ; Заголовок функції
(SETQ B 0.0) ; Заданий початковий кут B = 0
(ID) ; Виконана функція ID
(WHILE (< = B (* 2 PI)) ; Початок циклу
; Виконаємо функцію QUADR з
; параметрами L, B:
(QUADR L B)
; Збільшимо кут на 0.1 РІ
(SETQ B (+ B (* PI 0.1)))
; Змінимо L у 0.9 разів:
(SETQ L(* L 0.9))
) ; Кінець циклу
) ;defun
Результат виконання Програми 5 показаний на рис.2. У попередніх прикладах кожна програма містила по одному опису функції. Приклад Програми 5 демонструє, що така відповідність не обов'язкова. Програма може містити кілька описів функцій (кілька функцій DEFUN).
Рис. 1. Результат двохкратного виконання Програми 5 з різними вихідними даними
Кожен опис функції - це функціональний модуль, який можна використовувати окремо, зокрема в інших програмах. Зверніть увагу на передачу даних при виклику функції. У заголовку функції QUADR описано два аргументи: L, А. При звертанні у функцію QUADR передаються значення параметрів: L і В. Це варто розуміти так, що в момент звертання до QUADR:
А дорівнює В;
L (яке буде працювати усередині QUADR) стає рівним L (яке існувало поза QUADR).
Отже, А і В, L і L - це різні дані, і не має значення які вони мають імена (як А і В) або однакові (як L). Зміни, що відбуваються з В и L всередині функції, ніяк не відбиваються на значеннях А і L в іншій програмі.
Дата добавления: 2016-11-02; просмотров: 498;