Неправильні записи:
A B C – відсутні дужки.
(A_(B_C) – число дужок, що відкриваються, більше тих, що закриваються…
У LISP використовується префіксная форма запису обчислень, при якій як ім'я функції, так і аргументи записуються усередині дужок.
Використовуване в LISP так називане функціональне програмування ґрунтується на тій простій ідеї, що в результаті кожної дії виникає значення. Значення стають аргументами наступних дій, і кінцевий результат усієї задачі видається користувачеві.
Програми будуються з логічно розчленованих визначень функцій. Визначення складаються з, організуючих обчислення, керуючих структур і з вкладених, часто викликаючих самих себе (рекурсивних) функцій. Основними засобами функціонального програмування саме і є композиція і рекурсія. Крім функціонального програмування в LISP можна використовувати програмування, основане на звичайному послідовному виконанні операторів із присвоюваннями, передачами керування і спеціальних операторів циклу.
AutoLlSP працює в режимі інтерпретації. Усередині інтерпретатора “сидить” обчислювач, що виконує наступні дії:
визначає перший елемент, що є ім'ям виконуваної функції;
визначає наступні елементи, що є аргументами, необхідними для виконання заданої функції.
Отже функція – окремий випадок списка, і має формат: (ім′я функції_аргумент). Наприклад: (sin_PI),
де - sin – ім′я функції, _ - прогалина, PI – аргумент;
(+_а_в),
де + - ім′я функції, _ - прогалини, а, в – аргументи.
Всі функції можна розділити на 3 групи:
перша – вбудовані функції ALISP, імена яких і правила виконання відповідають інструкціям ALISP;
друга – функції користувача;
третя – функції, описан в інших програмах, які користувач підмикає до своєї
Виконання програми на ALISP полягає в тому, що інтерпретатор читає текст чергової функції і після завершення читання виконує її.
Опис нової функції (функції користувача) в ALISP розпочинається з службового слова defun, а далі вказується ім′я функції та список аргументів:
(defun_ім′я функції_(A_B_/C_D_L)
…
)
A і B – глобальні змінні, C, D, L – локальні змінні.
Програма 1
Приклад запису програми для рішення виразу: y=a sin(ώt), де а=0,05; ώ=15,7рад./с; t=0.1.
-
Мова C
Мова ALISP
#include<math.h>
main( )
{float y;
float a=0.5, omega=15.7, t=0.1;
y=a*sin(omega*t);
}
(defun Y ( )
(setq a 0.05 omega 15.7 t 0.1)
(setq Y (* a (sin (* omega t))))
)
Програма 2
Обчислення суми sin(A)+cos(A)
(defun sincos(A) ; ім′я функції і список аргументів (А)
(+ (sin A) (cos A)) ; вираз sin(A)+cos(A)
) ; defun – кінець програми
Для виконання програми необхідно в командному рядку ACAD набрати:
Command: (sincos 0) Результат в виводиться в командному рядку: 1 (кут в радіанах) sin 0 + cos 0 = 1.
ОСНОВНІ ФУНКЦІЇ AUTOLISP
1. Універсальні функції
QUOTE – блокує обчислення виразу:
‘<вираз> еквівалентно запису (QUOTE_<вираз>)
Приклад:
Command: (+ 2 3)
5
Command: (SETQ X ‘(+ 2 3))
(+ 2 3)
EVAL (інтерпретатор LISP) – обчислення будь-якого правильно складеного виразу LISP. Виклик EVAL неявно присутній в діалозі програміста з LISP-системою. Він необхідний для зняття блокування обчислення.
(EVAL <вираз>)
Приклад:
Command: (EVAL (QUOTE (+ 2 3)))
5
Command: (SETQ a ‘(+ 2 3))
(+ 2 3)
Command: (EVAL a)
5
1. Псевдофункції
Псевдофункції — це функції, які крім того, що мають значення, володіють «побічним ефектом». Ефект полягає в утворенні зв'язку між символом і його значенням.
Для того щоб подивитися, на яке значення посилається символ, досить у відповідь на запрошення ввести !символ.
До псевдофункцій відносяться:
SETQ — зв'язує ім'я зі значенням виразу:
(SETQ <символ1> <вираз1> |<символ2> <вираз2>|...)
Приклад:
Command: (SETQ b 123 с 4.7) еквівалентно b=123, c=4.7
Обчислювальні функції: +, -, *,/.
(SIN <число-кут>) ; кут у радіанах
(SQRT <число>)
(ATAN < число!> |<число2>|); обчислює арктангенс числа в радіанах, якщо не задано год
исло2. Якщо задані обоє числа, повертається арктангенс (число!/число2) у радіанах. Якщо число2 — нуль, то в залежності від знака числа! повертається + або —1.570796 радіан (90 або -90 градусів)
Косинус
кута: , .
Експонента:
Зведення числа в
ступінь:
Натуральний
логарифм: Максимальне з чисел:
(ЕХР <число>) ^ '
(ЕХРТ <число-підстава>
<число-ступінь>) ',
(LOG<4HCio>)
(МАХ <число> <число>...)
Мінімальне з чисел: (MIN <число> <число>...)
Убудовані функції обробки списків
