You are on page 1of 12

2/!Phmob!dibsblufsztuzlb!k{zlb!

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.

AutoLISP jest odmian jzyka programowania LISP, przystosowan do wsppracy


z pakietem AutoCAD. AutoLISP jest jzykiem wysokiego poziomu, dobrze nadajcym
si do zastosowa graficznych, ktry pozwala uytkownikowi pakietu AutoCAD na
tworzenie wasnych funkcji i programw. AutoLISP jest jzykiem stosunkowo atwym
do opanowania i wygodnym w uyciu.

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.

Wrd wykorzystywanych przez AutoLISP danych mona wyrni nastpujce typy:


symbole (typ SYM, symbol)
Symbole w AutoLISPie s wykorzystywane do przechowywania wartoci. Poniszy przykad ilustruje uycie funkcji setq do przypisania symbolowi pt1 wartoci wsprzdnych punktu (1,2):
(setq pt1 '(1 2))

Pojcia symbol i zmienna s uywane zamiennie.


listy (typ LIST, lista)
Listy s szeroko uywane przez AutoLISP. S one efektywn metod przechowywania licznych, powizanych ze sob wartoci jako jeden symbol. Niektre
funkcje AutoLISPu stanowi baz do programowania dwu- i trjwymiarowych
programw uytkowych. Funkcje te zwracaj wartoci wsprzdnych punktu
w postaci listy.
Do obsugi wsprzdnych graficznych AutoLISP wykorzystuje nastpujc
konwencj:
Punkty dwuwymiarowe s wyraane jako lista dwch liczb rzeczywistych (X Y),
na przykad:
(3.4 7.52)

Pierwsza warto jest wsprzdn X, a druga warto wsprzdn Y.


Punkty trjwymiarowe s wyraane jako lista trzech liczb rzeczywistych (X Y
Z), na przykad:
(3.4 7.52 1.0)

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.

Przekroczenie zakresu wartoci cakowitoliczbowych nie jest sygnalizowane.

wartoci rzeczywiste (typ REAL, real)


Wartoci rzeczywiste s liczbami zawierajcymi kropk dziesitn. Liczby z zakresu od 1 do 1 musz rozpoczyna si od zera. Liczby rzeczywiste s przechowywane w postaci liczb zmiennoprzecinkowych o podwjnej dokadnoci. Zapewnia to zapamitanie co najmniej 14 cyfr znaczcych, mimo e linia polece
AutoCADa pokazuje jedynie sze cyfr znaczcych.

Przekroczenie zakresu wartoci rzeczywistych nie zawsze jest sygnalizowane.

deskryptory plikw (typ FILE, deskryptor-pliku)


Deskryptory plikw s liczbowymi etykietami, zwizanymi z plikami otwieranymi
przez AutoLISP. Gdy funkcja AutoLISPu musi mie dostp do pliku (w celu zapisu lub odczytu), musi by wywoana ta wanie etykieta. Poniszy przykad powoduje otwarcie pliku test.dat, udostpniajc moliwo czytania go przez inne funkcje oraz przydziela symbolowi plik warto deskryptora pliku:
(setq plik (open "test.dat" "r"))

Powysze wyraenie moe zwrci na przykad:


<File:#34614>
<Plik:#34614>

nazwy elementw rysunku AutoCADa (typ ENAME, nazwa-elementu)


Nazwy obiektw s liczbowymi etykietami, przypisanymi do elementw w rysunku AutoCADa. W rzeczywistoci jest to wskanik do pliku utrzymywanego
przez AutoCAD, w ktrym AutoLISP moe odszuka rekord elementu w bazie
danych i zwizane z nim wektory (jeli jest to element widoczny na ekranie).
Etykiety te mog by wywoywane przez funkcje AutoLISPu, umoliwiajc
wybieranie elementw przeznaczonych do rnego rodzaju wykorzystania.
Poniszy przykad powoduje przypisanie symbolowi e1 wartoci nazwy obiektu
ostatniego elementu umieszczonego na rysunku:

2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ

36

(setq e1 (entlast))

Wyraenie to moe zwrci wynik w postaci:


<Entity name: 600000016>
<Nazwa elementu:600000016>

zbiory wybranych elementw rysunku AutoCADa (typ PICKSET, zbirwskaza)


Zbiory wskaza s grupami jednego lub wicej obiektw. Podobnie jak w zwykym procesie wybierania obiektw w AutoCADzie, w procedurach AutoLISPu
do tworzenia zbiorw wskaza moliwe jest interakcyjne dodawanie i odejmowanie obiektw do i ze zbioru. Poniszy przykad przypisuje symbolowi ssprev
zbir wskaza, skadajcy si z poprzednio wybranych elementw.
(setq ssprev (ssget "_p"))

Wyraenie to moe zwrci wynik w postaci:


<Selection set: 1>
<Zbir wskaza:1>

standardowe podprogramy (typ SUBR, funkcja-wewntrzna)


Wszystkie funkcje AutoLISPu, opisane w tym podrczniku, s typu subr, czyli
s procedurami wewntrznymi. Procedura typu subr moe by przedefiniowana
za pomoc funkcji defun. W takim wypadku jednak jej oryginalne znaczenie nie
bdzie ju dostpne dla innych procedur (przedefiniowywanie procedur wewntrznych nie jest zalecane).
podprogramy zewntrzne (typ external subr-exsubr)
Podprogramy zewntrzne s to procedury zdefiniowane przez program uytkowy
(aplikacj) w systemie ADS.

W AutoLISPie istniej dwa symbole predefiniowane, ktrych wartoci s stae i z gry


okrelone. Symbolami tymi s nil i T. Symbol nil naley rozumie jako nic, pusta
lista, jest on te oznaczeniem faszu logicznego. Symbol T naley rozumie jako co
i jest on oznaczeniem prawdy logicznej.

Wprowadzanie informacji z uyciem AutoLISPu moe odbywa si w rny sposb.


Wyraenia AutoLISPu mog by wpisywane z klawiatury, wczytywane z dyskowego
pliku tekstowego w formacie ASCII lub odczytywane ze zmiennych typu string. We
wszystkich przypadkach musz by zachowane nastpujce reguy:

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

Nastpujce znaki oznaczaj koniec nazwy symbolu lub koniec staej


liczbowej:
(

'

"

(spacja)

(koniec linii)

2. Wyraenia nie musz by pisane w jednej linii.


3. Zwielokrotnione spacje midzy symbolami s rwnowane spacji pojedynczej.
Stosowanie wci wyrniajcych linie wchodzce w skad poszczeglnych
wyrae nie jest wymagane, ale jednak znacznie poprawiaj one przejrzysto
struktury programu. Stosowanie znakw tabulacji w AutoLISPie nie jest zalecane. Najczciej s one traktowane jak spacje, jednak na niektrych
platformach mog by interpretowane inaczej.

2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ

38

4. Nazwy symboli i funkcji (podprogramw) mog by pisane zarwno maymi,


jak i duymi literami; nie ma to dla AutoLISPu znaczenia.
5. Stae typu integer mog rozpoczyna si opcjonalnym znakiem + lub . Jak
wczeniej wspomniano, mieszcz si one w zakresie od 32 768 do +32 767.
6. Stae typu real mog rozpoczyna si od opcjonalnego znaku + lub i skada
si z jednej lub wielu cyfr, kropki dziesitnej i kolejnych cyfr. Przykadowo,
wprowadzenie .4 nie zostanie zinterpretowane jako wprowadzenie danej typu
real. Poprawne jest wprowadzenie tej liczby w postaci 0.4. Podobnie, zapis 5. nie
jest rozpoznawany jako liczba rzeczywista, prawidowy jest format 5.0. Liczby
rzeczywiste typu real mog by przedstawiane w postaci wykadniczej. Po liczbie wystpuje wtedy opcjonalnie litera e lub E, ktra poprzedza warto wykadnika jej potgi (oznacza to, e 0.0000041 i 4.1e6 to te same wartoci).
7. acuchy alfanumeryczne s sekwencjami znakw ujtych z obu stron podwjnymi cudzysowami. Umieszczany w obrbie midzy cudzysowami znak
lewego ukonika (\) jest uywany w celu umoliwienia wprowadzania znakw
sterujcych (lub tzw. kodw sterujcych).
Aktualnie rozpoznawanymi kodami s:
\\
oznacza pojedynczy znak \
\" oznacza pojedynczy znak "
\e oznacza znak ucieczki (escape)
\n oznacza znak nowej linii
\r oznacza znak powrotu karetki (return)
\t
oznacza znak tabulacji (tab)
\nnn oznacza znak o kodzie semkowym nnn
Na przykad ponisza instrukcja powoduje pojawienie si zgoszenia gotowoci
z pytaniem o punkt:
(prompt "Wska pierwszy punkt: ")

Natomiast instrukcja:
(princ "\361")

w systemach opartych o DOS wywietla znak "+/".

W AutoLISPie mona korzysta ze zmiennych czterech typw: cakowitych (integer),


rzeczywistych (real), punktowych (point) i acuchw alfanumerycznych (string).
Zmienna zostaje przyporzdkowana do okrelonego typu automatycznie, w oparciu
o przypisywan jej warto. Zmienne zachowuj swoj warto a do momentu przypisania im innej wartoci lub zakoczenia biecej sesji edycji. Zmienne mog
otrzymywa dowolne nazwy pod warunkiem, e zaczynaj si one od litery. Zmienna pi
ma wstpnie przypisan warto . Mona jej uywa tak, jak dowolnej innej zmiennej
zdefiniowanej samodzielnie.

39

BvupMJTQ!!qsbluzd{oz!lvst
Do przypisywania zmiennym wartoci suy w AutoLISPie funkcja setq. Jej format jest
nastpujcy:
(setq nazwa_zmiennej warto_zmiennej)

Funkcja setq powoduje przypisanie okrelonej wartoci zmiennej o podanej nazwie.


Ponadto zwraca warto jako wynik wykonania funkcji. Uycie funkcji setq w odpowiedzi na zgoszenie Command: (Polecenie:) AutoCADa powoduje ustalenie wartoci
zmiennej i wywietlenie przypisywanej wartoci. Nawiasy okrge, obejmujce wyraenie, s konieczne. Oto kilka przykadw:
(setq zm_1 3)
(setq x 3.875)
(setq nazwa_warstwy "KONSTRUKCYJNA_1")

W przykadach tych kolejno nastpuje przypisanie wartoci zmiennym typu: cakowitego,


rzeczywistego i acuchowego. Zmienne typu punktowego s bardziej zoone, gdy zawieraj wsprzdne X, Y i (opcjonalnie) Z. Punkty s przedstawiane jako listy dwch
lub trzech liczb, ujtych w nawiasy okrge. Do utworzenia takiej listy wsprzdnych
moe by wykorzystana funkcja list:
(list 1.25 2)
(list 22.5 10 3.75)

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

From point: !pt_1

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.

Wszystkie wyraenia w AutoLISPie maj nastpujc posta:


(nazwa-funkcji [argumenty]...)

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:).

Funkcje AutoLISPu tworzone przez uytkownika s traktowane przez interpreter jak


listy o specyficznej budowie. Funkcje te wykonywane s tak samo jak wbudowane
funkcje AutoLISPu czy AutoCADa. Do tworzenia definicji funkcji suy instrukcja
defun. Schemat budowy funkcji jest nastpujcy:

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.

Program w AutoLISPie jest to cig instrukcji AutoLISPu i funkcji zdefiniowanych


przez uytkownika. Programy zapisywane s w plikach tekstowych z rozszerzeniem
.LSP, a adowane funkcj load.
Na przykad:
(load "test1")

Jeeli rozszerzenie pliku jest inne ni .LSP, naley je poda razem z nazw programu.
Na przykad:
(load "demo1.pl")

W plikach programw w AutoLISPie mog by umieszczane komentarze. Komentarze


rozpoczynaj si rednikiem i kocz wraz z kocem linii. Oto przykady komentarzy:
;Ta linia tekstu jest komentarzem
(setq pole (* pi r r)) ;Obliczenie pola okrgu

Poczwszy od wersji 12 AutoLISPu wprowadzono nowy rodzaj komentarza, w ktrym


ignorowany jest kady tekst pomidzy ";|...|;". Dziki temu moliwe jest tworzenie
komentarzy wewntrz linii kodu lub komentarzy zajmujcych wiele linii. Przykadem
komentarza wewntrz linii programu moe by ponisza instrukcja:
(setq tmode ;|tu jaka uwaga|; (getvar "tilemode"))

2/!Phmob!dibsblufsztuzlb!k{zlb!BvupMJTQ

42

Ponisze linie zawieraj przykad komentarza zajmujcego wiele linii:


;|

Oto przykad komentarza zajmujcego wiele linii kodu. Komentarz taki zosta wprowadzony poczwszy od wersji 12 AutoLISPu.
|;

Interpreter AutoLISPu jest uruchamiany kadorazowo po wejciu AutoCADa do


edytora graficznego. Jeeli na ciece poszukiwa plikw AutoCADa znajduje si plik
ACAD.LSP, to jest on adowany i wykonywany. W pliku tym mog by umieszczone
definicje i wywoania funkcji AutoLISPu. Podczas adowania wywietlany jest komunikat:
Loading acad.lsp...loaded.

Od tej chwili funkcje zdefiniowane w pliku ACAD.LSP s dostpne dla uytkownika.


Polecenia dla AutoLISPu wpisujemy bezporednio po zgoszeniu gotowoci AutoCADa
Command: (Polecenie:). Podstawowymi operacjami wykonywanymi kolejno przez
interpreter AutoLISPu s: pobranie linii wyraenia wprowadzonego przez uytkownika,
wyznaczenie jego wartoci (ewaluacja) i zwrcenie otrzymanego wyniku.
Proces wartociowania (ewaluacji) obiektw podlega w AutoLISPie nastpujcym reguom:
Wynikiem ewaluacji obiektw typu integer, real, string oraz deskryptorw
plikw i funkcji wewntrznych s te same obiekty.
Wynikiem ewaluacji symboli s przypisane im aktualne wartoci.
Wynik ewaluacji list zaley od pierwszego elementu listy. Jeeli wynikiem
ewaluacji tego obiektu jest:
lista (lub nil), to przyjmowane jest zaoenie, e lista jest definicj funkcji
i warto funkcji jest wyznaczana dla argumentw, ktrymi s pozostae
elementy listy;
nazwa funkcji wewntrznej (podprogramu), to pozostae elementy listy
traktowane s jako argumenty formalne tej funkcji i s poddawane ewaluacji przez podprogram.

43

BvupMJTQ!!qsbluzd{oz!lvst

Jeeli AutoLISP wykryje bd w trakcie wyznaczania wartoci jakiego wyraenia, to


pojawi si nastpujcy komunikat:
error: tekst
bd: tekst

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.

You might also like