AutoLISP

мова програмування (інформатика)

AutoLISP — діалект мови програмування високого рівня Common LISP, створений для використання з повною версією AutoCAD (а також з версією AutoCAD LT 2024 та вище) і його похідних, до яких належать Autodesk MAP 3D та Autodesk Architectural Desktop. Lisp — мова функціонального програмування декларативного (описового) типу, на відміну від процедурних (C, Fortran, Pascal,…).

Особливості ред.

AutoLISP є невеликим, динамічно масштабованим діалектом LISP. В ній відсутні можливості сучасних діалектів LISP, такі як система макросів, структури списків що налаштовуються. Крім базової мови, більшість функцій створено для виконання геометричних перетворень та роботи з графічними примітивами в середовищі AutoCAD. Властивості цих графічних приміток представляються в AutoLISP як асоціативний масив, в яких AutoCAD «групує код» парами, де значення відповідають таким властивостям як точки, радіуси, кольори, кулі, типи ліній і таке інше.

Код AutoLISP може взаємодіяти з користувачем через базові функції які дозволяють користувачеві вводити точки, набори виділень (selection sets), цифри та інші дані. AutoLisp також має вбудовану міні-мову графічного інтерфейсу користувача, та Мова управління діалогами, для створення інтерактивних форм засобами AutoCAD.

; приклад макро команди без інтерфейсу командного рядка

(defun hello_world ()
  (alert "Hello world!"))

; приклад макро команди з інтерфейсом командного рядка

(defun c:hello_world ()
  (alert "Hello world!")
  (princ))

; приклад обробки гнучкої умови LISP

(cond
  ((= a b) (princ "\n(a) and (b) are equal"))
  ((and (= (type a) 'INT) (= (type b) 'INT)) 
    (princ (strcat "\n(a)+(b)=" (itoa (+ a b)))))
  ((and (= (type a) 'STR) (= (type b) 'STR))
    (princ (strcat "\n(a)+(b)=" a b)))
  ((and (listp a) (= (type b) 'SUBR))
    (mapcar '(lambda (x) (princ (b x))) a)))

Історія ред.

AutoLISP походить з дуже ранньої версії XLISP, яка була створена Девідом Бетцем (David Betz). Мова була введена в AutoCAD версіі 2.18 в січні 1986, та продовжувала вдосконалюватися в наступних версіях аж до Версії 13 в лютому 1995. Після цього, її розробку було припинено компанією Autodesk на користь модніших середовищ розробки (VBA, .NET та Object ARX)[джерело?]. Але її було збережено як основну мову налаштувань користувача.

Visual-LISP, значно покращена версія AutoLISP, що включала інтегроване середовище розробки, зневаджувач, та компілятор, була розроблена та продана «третьою компанією» Basis Software. Vital LISP, була «обгорткою» для існуючої мови AutoLISP, яка надавала VBA-подібний доступ до об'єктної моделі AutoCAD, reactors (обробка подій для об'єктів AutoCAD), загальної підтримки ActiveX, та деяких інших загальних функцій мови Lisp. Autodesk придбала її, перейменувала в Visual LISP, та швиденько продала її як додаток до AutoCAD 14 версії в травні 1997. Вона була приєднана до версії AutoCAD 2000, яку було видано в березні 1999, як заміна AutoLISP. З тих пір Autodesk вирішила призупинити вдосконалення Visual LISP задля того, щоб зосередити більше зусиль на VBA, .NET та ObjectARX.

AutoLISP мала такі потужні наслідки, що інші виробники застосунків CAD додали її до своїх власних продуктів. ZwCAD, Bricscad та інші, засновані на технології IntelliCAD, мають функціональність AutoLISP, таким чином користувачі AutoLISP можуть вирішити використовувати їх як альтернативу AutoCAD. Найбільша кількість розроблених застосунків AutoLISP з часу виходу AutoCAD 2000, була фактично створена в межах програмного середовища Visual LISP з тих пір, як оригінальний двигун (engine) AutoLISP було замінено на двигун Visual LISP. Сьогодні існують тисячі інструментів та застосунків які були розроблені з використанням AutoLISP чи Visual LISP.

Огляд мови ред.

Під списком розуміється впорядкована послідовність (яка записується у круглих дужках), елементами якої є:

  • числові сталі (цілі й дійсні числа);
  • текстові сталі;
  • логічні (T — істина, NIL — хиба);
  • ідентифікатори (імена змінної, функції, аргументу);
  • список.

Список, який не містить жодного елемента, називається пустим й позначається () або NIL. Список записується у круглих дужках, а елементи списку відділяються пробілами. Наприклад, щоб отримати суму чисел 2, 3 та 4, можна записати у командному вікні AutoCad (Command:): (+ 2 3 4)

 

Як тільки ви натиснете Enter, AudoCad обчислить вказаний вираз й видасть результат: 9.

Виразом є список, у якому першим елементом є ім'я функції. Будь-яка функція AutoLisp складається з виразів і сама є виразом. Це ілюструє форму обчислюваних виразів мови AutoLisp: (<функція> [<аргумент1> [<аргумент2> … <аргументN>…]])

де квадратні дужки означають, що елемент може бути у списку, а може й не бути. Аргументами (параметрами) є засоби передачі значень (даних) у функцію. Аргументами можуть бути числові константи (числові, текстові, логічні) або вирази. Число аргументів функції може бути змінним, фіксованим або нульовим.

Змінні — це елементи мови AutoLisp, призначені для представлення різних елементів мови і які не мають сталого значення.

Константами є елементи мови AutoLisp, призначені для самопредставлення, які мають стале значення. Константи у AutoLisp є трьох видів: числові (цілі та дійсні), текстові та логічні. Приклади констант:

  • -41221;
  • 421.2e+8;
  • «Написаний рядок»;
  • («Аа» «Бб» «Вв» «Гг» «Ґґ»);
  • (13 «Привіт» 12 «що?» 1 "" «&»).

Взагалі Lisp працює з наступними типами:

  • цілі числа;
  • дійсні числа;
  • string;
  • список, точкова пара, точковий список;
  • дескриптор файлу;
  • вказівник функції, застосунку;
  • примітив AutoCad;
  • набір.

Крім того, є також декотрі інші типи (варіанти, безпечні масиви, VLA-об'єкти, VLR-об'єкти).

Списки особливого типу, у яких два елементи розділені крапкою, називаються точковими парами. Вони створюються за допомогою функції cons. Наприклад,

  • (0 . «POLYLINE»);
  • (62 . 29).

Списки, які складаються з трьох або більше елементів й у яких останній елемент відділяється крапкою, називаються точковими. Вони можуть створюватися за допомогою функції vl-list*. Наприклад,

  • (120 14 . 67).

Важливу роль відіграє функція Command, яка імітує уведення у командному вікні AutoCad з клавіатури. Таку саму функцію відіграє функція vl-cmdf. Синтаксис функції Command:

 (command [<параметр1> [<параметр2> ... <параметрN>]])

Значення, яке повертається — NIL.

 

Функція може викликатися без параметрів, це є рівносильним натисненню клавіші Esc, що перериває дію активної команди. Припустимо, потрібно намалювати відрізками прямокутник з розмірами 100 х 120. Лівий нижній кут прямокутника візьмемо у точці (0,0) і верхній правий — у точці (100,120). Команда відрізків у Autocad називається Line. Для виконання цієї команди у будь-якій мовній версії Autocad будемо використовувати риску знизу _LINE. Крім цього, додамо крапку (щоб не працювати із перевизначеною командою):

 _.LINE

По цим вказанням Autocad викличе функцію LINE, візьме як першу точку (0,0), як другу — (0,100), як третю (100,120), як четверту (0,120), а «_C» (відповідає опії Close (Замикнути)) замикне відрізки на першу точку (опції також бажано використовувати англійські із нижньою рискою).

Посилання ред.