Підпрограми, розгалуження і цикли. Логічні функції. Функції WHILE і IF.
У будь-якій мові програмування є засоби для створення підпрограм, циклів, розгалужень у програмах у залежності від результатів перевірки умов. Такі засоби є й в Автоліспі.
Підпрограма дозволяє описати деяку послідовність дій один раз, а використовувати її в різних місцях програми і навіть включати в інші програми, що значно спрощує програмування.
Для цих цілей в Автоліспі служить вже відома функція DEFUN. Опис деякої функції за допомогою DEFUN і можна вважати підпрограмою, а звертання до описаної раніше функції - викликом підпрограми. При звертанні на місце символічних аргументів в описі функції підставляються значення цих змінних. Наприклад, описана в Програмі 1 функція SINCOS(A) може розглядатися як підпрограма. А рядок (SINCOS 0.0), який зустрічається в якій-небудь програмі, є звертанням до цій підпрограми, причому аргумент А приймає значення 0.
Розгалуження в програмі організуються за допомогою функції IF:
(IF <умова> <функція1> [<функція2>])
Тут < умова> - такий вираз Автоліспа, який серед інших значень може в якійсь ситуації одержати значення NIL.
Функція IF обчислює значення умови і, якщо воно не NIL, те виконує < функцію1 >, інакше - виконує <функцію2>, якщо та присутня. Функція IF повертає результат виконання функції. Таким чином, функція IF відповідає керуючій структурі псевдокоду ЯКЩО - ТО - ІНАКШЕ.
Для запису умов найчастіше використовуються функції, що назвемо логічними. До них відносяться функції
= (дорівнює) < (менше) > (більше)
/= (не дорівнює) < = (менше або дорівнює)
> = (більше або дорівнює),
які дозволяють виконувати порівняння чисел або текстів, а також функції AND, OR, NOT, що забезпечують можливість будувати складні умови з простих.
Усі ці функції можуть повертати одне з двох значень: NIL ("ні", умова не виконується) або Т ("так", умова виконується).
Наприклад, функція " = " має вигляд:
(= <атом> <атом>...)
Тут як атоми можуть стояти або числа (як цілі, гак і речовинні), або текстові дані. Функція повертає Т, якщо всі атоми рівні між собою, інакше - NIL.
Функція "/=" визначена тільки для двох атомів.
Функція "<":
(< <атом> <атом>...)
Якщо кожен попередній атом менше наступного, то повертається Т, інакше - NIL.
Аналогічно визначаються інші функції порівняння. Для текстових констант поняття "менше" означає наступне: порівняння виконується по першій літері. "Меншим" вважається той символ, ASCII-код якого менше. Для літер алфавіту коди наростають за абеткою (окремо для заголовних, окремо для малих літер).
Функції AND, OR, NOT є функціями алгебри логіки.
(AND <вираз> ...)
Функція виконує операцію логічного “І” над списком виразів, тобто функція повертає NIL, якщо хоча б один вираз має значення NIL. Інакше повертається Т.
(OR <вираз> ...)
Виконується операція логічного “АБО”. Повертається Т, якщо хоча б один вираз має значення Т, інакше - NIL.
(NOT < вираз >)
Виконується логічна функція “НІ”. Якщо вираз має значення NIL, то повертається Т, у всіх інших випадках повертається NIL.
Приклади:
Нехай маються .наступні значення:
А = 5
В = "ТЕХТ1”
С = NIL
Тоді
(= А 5) повертає Т
(= А 5.0) - Т
(>= A 10) - NIL
(< У “ТЕХТ2") -Т
(AND А В С) - NIL
(OR А В С)-Т
(NOT З) - Т
(OR(= A5)(= A 10))-Т
Наведена нижче Програма 4 ілюструє розгалуження за умовою з використанням функції IF.
Дата добавления: 2016-11-02; просмотров: 603;