Académique Documents
Professionnel Documents
Culture Documents
BvupMJTQ
32
W rozdziale tym zostanie przedstawiona oglna skadnia jzyka AutoLISP: typy danych,
symbole predefiniowane, konwencje leksykalne podczas pisania programw, zmiennei
wyraenia AutoLISPu, komentarze, oglna budowa funkcji i programw, sposb pracy
interpretera AutoLISPu oraz obsuga bdw przez AutoLISP.
Kady program napisany w jzyku wysokiego poziomu trzeba przeksztaci na kod (lub
jzyk maszynowy) procesora, ktry ma ten program wykona. Robi si to zazwyczaj
w jeden z dwch powszechnie przyjtych sposobw.
Pierwszy sposb polega na tym, e program w prawie takiej samej postaci, w jakiej
wprowadzono go do komputera, umieszcza si w pamici operacyjnej (taki program
nazywamy kodem rdowym). Podczas wykonywania programu pobiera si kolejno
jego pojedyncze wiersze, tumaczy na kod maszynowy, a nastpnie ten kod wykonuje.
Wynikowy kod maszynowy dla przetumaczonego wiersza programu bdzie umieszczony w tym samym miejscu, co kod maszynowy poprzedniego wiersza, ktry
zostanie zniszczony. Jeeli wic jaki wiersz kodu rdowego wystpi w ptli, ktra
ma by wykonywana 100 razy, to trzeba bdzie rwnie 100 razy powtrzy
tumaczenie tego wiersza. Translator, w ktrym przyjto tak strategi, nazwano
interpreterem.
33
BvupMJTQ!!qsbluzd{oz!lvst
Jest oczywiste, e taka metoda jest powolna i niewydajna zarwno z powodu wielokrotnego (a wic niepotrzebnego) powtarzania tumaczenia tych samych wierszy programu,
jak i dlatego, i tumaczenie odbywa si podczas wykonywania programu. Ma ona
wszake jedn zasadnicz zalet. Podczas wykonywania programu interpreter odwouje
si do jego kodu rdowego. Moemy wic do atwo poprawi fragment programu
i wykona go powtrnie.
Drugi ze sposobw polega na tym, e cay program rdowy jest tumaczony na
program w jzyku maszynowym, a nastpnie jest wykonywany. Trwa to znacznie krcej
i unika si w ten sposb tumaczenia programu podczas jego wykonywania. Translator
napisany zgodnie z t zasad nazywamy kompilatorem.
Interpretery s bardziej przydatne dla pocztkujcych programistw, z powodu atwiejszej rozbudowy i przeksztacania programw. Dowiadczeni programici wol uywa
kompilatorw, przede wszystkim z powodu znacznego przyspieszenia czasu wykonywania programu.
Istnieje szereg powodw, ktre przyczyniy si do tego, e jzyk LISP zosta wybrany
jako podstawowy jzyk do zapewnienia komunikacji midzy AutoCADem i oprogramowaniem uytkowym:
LISP jest jednym z najatwiejszych do opanowania jzykw programowania;
uytkownikowi atwo osign do wysoki poziom perfekcji.
Jzyk ten zosta wybrany do stosowania w pracach badawczo-rozwojowych
dotyczcych sztucznej inteligencji i systemw ekspertowych.
Wyjtkowo prosta skadnia jzyka LISP powoduje, e interpreter LISPu jest
atwy do implementacji i zajmuje stosunkowo niewiele miejsca w pamici.
Interpreter jzyka LISP jest doskonale przystosowany do niesformalizowanego
strukturalnie dialogu z uytkownikiem, charakterystycznego dla procesw projektowania.
2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ
34
LISP jest jzykiem programowania przewyszajcym inne jzyki swoj zdolnoci do operowania zbiorami heterogenicznych obiektw w grupach o rnej wielkoci; jest to dokadnie taki sam rodzaj informacji, jakim posuguj si systemy
CAD, takie jak AutoCAD.
Pierwsza warto jest wsprzdn X, druga warto wsprzdn Y, a warto trzecia wsprzdn Z.
acuchy alfanumeryczne (typ STR, string)
Dane typu string zawieraj znaki ASCII o kodach 0 do 255. acuchy w AutoLISPie mog mie dowoln dugo, gdy pami dla nich jest przydzielana
dynamicznie. Chocia podczas wprowadzania danych typu string obowizuje
ograniczenie dugoci acucha do 132 znakw, to jednak metod czenia
acuchw przy uyciu funkcji strcat mog by tworzone acuchy o nieograniczonej dugoci.
35
BvupMJTQ!!qsbluzd{oz!lvst
wartoci cakowitoliczbowe (typ INT, integer)
Wartoci cakowite nale do zbioru liczb cakowitych. Wprowadzane s bez
kropki dziesitnej. W AutoLISPie dane typu integer s wartociami 32-bitowymi
ze znakiem, mieszczcymi si w zakresie od 2 147 483 648 do +2 147 483 647.
Mimo, e wewntrznie AutoLISP wykorzystuje format 32-bitowy, do wymiany
danych pomidzy AutoLISPem i AutoCADem wykorzystywanych jest tylko 16
bitw (oznacza to, e do AutoCADa nie mona przesa danych wikszych ni
+32 767, lub mniejszych ni 32 768). Jeli zachodzi konieczno uycia liczby
wykraczajcej poza ten zakres, naley skorzysta z funkcji float, zmieniajcej
typ wartoci cakowitej na rzeczywist (typu real), gdy wartoci rzeczywiste s
transferowane jako 32-bitowe.
2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ
36
(setq e1 (entlast))
37
BvupMJTQ!!qsbluzd{oz!lvst
1. Nazwy symboli mog stanowi dowolne sekwencje znakw drukarskich za
wyjtkiem:
(
'
"
nawiasy okrge ( )
Su do oznaczania list obiektw. Kady nawias otwierajcy musi
mie swj odpowiednik w nawiasie zamykajcym. Niekompletno
nawiasw jest najczstszym bdem popenianym podczas pisania
programw w AutoLISPie. Niepoprawna liczba nawiasw powoduje
podczas adowania programu komunikat o bdzie, natomiast w trybie
bezporednim wywietlenie znaku >n, gdzie n jest liczb nie zamknitych nawiasw.
kropka .
Jest oznaczeniem kropki dziesitnej np. 1.25, jak rwnie oznacznikiem pary kropkowej np. (1 . 25). Rnica polega na braku spacji przy
kropce dziesitnej.
apostrof '
Jest to skrcona posta zapisu funkcji quote cytowanie, ktra
zapobiega ewaluacji obiektu.
(quote x) <=> 'x
cudzysw "
Jest ogranicznikiem acuchw tekstowych.
rednik ;
Jest oznaczeniem komentarza. Po napotkaniu rednika interpreter
AutoLISPu ignoruje wszystko a do napotkania znaku koca linii
(LF).
wykrzyknik !
Jest to skrcona posta zapisu funkcji eval, powodujca wymuszon
ewaluacj obiektu. Wykrzyknika uywamy w trybie bezporednim
(z klawiatury).
(eval x) <=> !x
'
"
(spacja)
(koniec linii)
2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ
38
Natomiast instrukcja:
(princ "\361")
39
BvupMJTQ!!qsbluzd{oz!lvst
Do przypisywania zmiennym wartoci suy w AutoLISPie funkcja setq. Jej format jest
nastpujcy:
(setq nazwa_zmiennej warto_zmiennej)
Jak z tego wynika, przypisanie okrelonych wsprzdnych do zmiennej typu punktowego odbywa si w nastpujcy sposb:
(setq punkt_1 (list 1.25 2))
(setq punkt_2 (list 22.5 10 3.75))
Wartoci zmiennych AutoLISPu mog by wykorzystywane jako odpowiedzi na zgoszenia gotowoci AutoCADa. W tym celu naley wprowadzi nazw zmiennej, poprzedzon wykrzyknikiem ! Przypumy na przykad, e wczeniej zostaa zdefiniowana
zmienna x1 o wartoci 1.25. W kadym wypadku, gdy w odpowiedzi na zgoszenie
AutoCADa powinna by podana warto 1.25, mona wpisa !x1.
Na przykad:
Distance between columns: !x1
Odlego midzy kolumnami: !x1
Analogicznie, jeli ma by narysowany odcinek o kocu w punkcie (1.0,4.0), a wczeniej zmiennej pt_1 zosta przypisany ten wanie punkt, mona wprowadzi nastpujc odpowied:
Command: line
Polecenie: linia
Od punktu: !pt_1
2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ
3:
Uwagi:
1. Aby wyraenie lub wywoanie zmiennej AutoLISPu zostao zinterpretowane
waciwie, pierwszym znakiem wprowadzonym w odpowiedzi na zgoszenie
gotowoci musi by lewy nawias ( lub wykrzyknik !.
2. Jeeli zmienna lub wyraenie AutoLISPu maj zosta wykorzystane do wprowadzenia acucha tekstowego dla takich polece, jak TEKST lub ATRDEF,
naley wczeniej ustawi zmienn systemow TEXTEVAL na 1. Konieczno ta
wynika std, e zwyczajny tekst take moe rozpoczyna si od nawiasu ( lub
wykrzyknika !.
3. Odwoanie do zmiennej AutoLISPu nie moe by wykorzystane do wprowadzenia polecenia AutoCADa. Na przykad, po przypisaniu zmiennej x wartoci
"line" i podaniu !x, w odpowiedzi na zgoszenie AutoCADa Polecenie:, spowoduje wywietlenie wartoci "line" w linii polece. Polecenie LINIA nie zostanie
wywoane. Do wywoywania polece AutoCADa z programw AutoLISPu suy
funkcja command.
Kade wyraenie rozpoczyna si lewym nawiasem okrgym i skada si z nazwy funkcji i opcjonalnej listy argumentw tej funkcji (z kolei kady z argumentw te moe
by wyraeniem). Wyraenie koczy si prawym nawiasem okrgym. Kade wyraenie zwraca jak warto, ktra moe by wykorzystana przez wyraenie wyszego
poziomu (czyli zawierajce rozpatrywane wyraenie). Jeeli nie istnieje wyraenie
wyszego poziomu, wartoc zwracana jest do AutoCADa.
Jeeli w odpowiedzi na zgoszenie gotowoci AutoCADa Command: (Polecenie:) zostanie wprowadzone wyraenie AutoLISPu, to jego warto jest bezzwocznie wyznaczana
i wywietlana przez AutoLISP. Potem ponownie pojawia si zgoszenie AutoCADa
Command: (Polecenie:).
41
BvupMJTQ!!qsbluzd{oz!lvst
(defun nazwa_funkcji (argumenty_wywoania / zmienne_lokalne)
(ciao_funkcji)
)
Ciao funkcji stanowi lista instrukcji wykonywanych po jej wywoaniu. Kada funkcja
zwraca warto bdc efektem zewaluowania ciaa funkcji.
Funkcja ma dostp do wszystkich zmiennych globalnych ju istniejcych. Po wywoaniu funkcji tworzone s zmienne odpowiadajce argumentom wywoania funkcji
i zmiennym lokalnym. Po wykonaniu funkcji zmienne te s niszczone otrzymuj
warto nil.
Jeeli rozszerzenie pliku jest inne ni .LSP, naley je poda razem z nazw programu.
Na przykad:
(load "demo1.pl")
2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ
42
Oto przykad komentarza zajmujcego wiele linii kodu. Komentarz taki zosta wprowadzony poczwszy od wersji 12 AutoLISPu.
|;
43
BvupMJTQ!!qsbluzd{oz!lvst
gdzie tekst jest opisem bdu. Jeeli funkcja *error* zostanie zdefiniowana i jest ona
rna od nil, to jest ona wykonywana przez AutoLISP zamiast wywietlania komunikatu, a tekst jest wwczas argumentem tej funkcji. Jeeli funkcja *error* nie jest zdefiniowana, lub jej aktualn wartoci jest nil, to AutoLISP przerywa proces ewaluacji
i wywietlony zostaje sigajcy do 100 poziomw wstecz zapis wywoywanych funkcji
i ich wywoa.
Kod ostatniego bdu jest zapamitywany jako warto zmiennej systemowej AutoCADa o nazwie ERRNO, ktr mona odczyta za pomoc funkcji getvar.