You are on page 1of 8

4/![sp{vnjfojf!joufsqsfufsb!

BvupMJTQv

66

AutoLISP jest jzykiem funkcyjnym. Oznacza to, e bazuje na pojciu funkcji bdcej
odwzorowaniem relacji pomidzy dwoma zbiorami obiektw. Funkcja jest tu jedynym
typem operacji elementarnej znanej temu jzykowi. Kady program w AutoLISPie jest
funkcj. Moe on korzysta z innych funkcji zdefiniowanych przez uytkownika. Na
funkcje uytkownika (funkcje zoone) skadaj si operacje elementarne nazywane
funkcjami systemowymi. A zatem program napisany w AutoLISPie skada si z wzajemnie wywoujcych si funkcji, gdzie najwyej w chierarchii jest funkcja zwana
programem, za najniej funkcje systemowe.
Argumentami funkcji AutoLISPu s obiekty elementarne wyraenia symboliczne.
Istniej dwa typy argumentw obiektw elementarnych: ATOMY i LISTY. Mechanizm dziaania jzyka AutoLISP sprowadza si do oceny wymienionych obiektw elementarnych polegajcej na ustaleniu wartoci przysugujcej danemu obiektowi i przyporzdkowaniu jej do tego obiektu.

Podstawowym, elementarnym i niepodzielnym obiektem jzyka AutoLISP jest ATOM.


Atomy su jako nazwy operacji elementarnych, a take do przechowywania wartoci.

67

BvupMJTQ!!qsbluzd{oz!lvst

4/2/2/ Bupn!dzgspxz
Bupn!dzgspxz
Jest to po prostu liczba, ktra reprezentuje sam siebie (2 jako atom reprezentuje warto 2).

4/2/3/ Bupn!mjufspxz
Bupn!mjufspxz
!jefouzgjlbups!{njfoofk
!jefouzgjlbups!{njfoofk
Jest to cig znakw alfanumerycznych pisanych bez odstpu (spacji). W przeciwiestwie do atomu cyfrowego warto atomu literowego nie tkwi w nim samym. Warto ta
musi zosta przypisana. Jeeli przypatrzymy si zapisowi programu w AutoLISPie to
zauwaymy, e wyraenia s ujte w nawiasy. Dla naszych potrzeb zapamitajmy po
prostu, e ATOM to wyraenie nie ujte w nawiasy.

Lista jest to obiekt elementarny lub cig obiektw elementarnych oddzielony spacjami
i ujty w nawiasy.
Zatem wyraenie:
(LISTA X Y 5)

jest list skadajc si z czterech atomw: trzech literowych LISTA X Y i jednego


cyfrowego 5.
Wyraenie postaci:
(element_listy)

jest list jednoelementow, skadajc si z atomu literowego element_listy, natomiast wyraenie:


()

jest list pust.


Wyraenie postaci:
(LISTA_1 (LISTA_2 10))

jest dwuelementow list, w ktrej pierwszy element jest atomem literowym


LISTA_1, natomiast drugi element jest list skadajc si z atomu literowego i cyfrowego (LISTA_2 10).
Kade wyraenie AutoLISPu przybiera wic nastpujc posta:
(NAZWA_FUNKCJI <argument_1> <argument_2> ...)

4/![sp{vnjfojf!joufsqsfufsb!BvupMJTQv

68

Wyjanijmy sobie teraz, co kryje si za tym napisem:


kade wyraenie rozpoczynamy nawiasem lewym,
po nawiasie wpisujemy nazw funkcji,
po nazwie funkcji wystpuj jej argumenty (funkcje mog mie jeden argument,
nie mie argumentu lub mie ich wiele),
kade wyraenie zamykamy nawiasem prawym,
wyraenie moe by argumentem innego wyraenia, np.
(setq punkt (list 2 4 0))

W tym przykadzie wyraenie (list 2 4 0) jest argumentem wyraenia setq.


wyraenie jest wykonywane natychmiast i zwraca warto.
Po tym wstpie pora na wyjanienie sobie, w jaki sposb AutoCAD komunikuje si
z interpreterem AutoLISPu.
Kiedy w linii komend pojawia si napis "Command:" ("Polecenie:"), AutoCAD jest
gotowy do przyjcia komendy. Wpisujc np. LINE powodujemy uruchomienie
standardowej komendy AutoCADa rysujcej lini. Jeli jednak jakikolwiek cig
znakw umiecimy w nawiasach, AutoCAD traktuje go jako wyraenie i przekazuje do
AutoLISPu. AutoLISP dokonuje ewaluacji (oszacowania) wartoci wyraenia, a rezultat
zwraca do AutoCADa. Przeledmy to na kilku przykadach:

Qs{zlbe!2
Command: (+ 1 2 3)

6
Command:

Skorzystalimy tutaj z wbudowanej funkcji AutoLISPU, realizujcej arytmetyczn


operacj dodawania. Nazw funkcji jest tutaj znak "+", natomiast jej argumentami s
cyfry 1, 2 i 3. Po oszacowaniu wartoci wyraenia, AutoLISP zwraca jego wynik do
AutoCADa (w tym przypadku jest to cyfra 6).
Command: (+ 1.0 2 3)
6.0
Command:

W przypadku, gdy cho jeden z argumentw funkcji wykonujcej operacje arytmetyczne jest liczb rzeczywist, funkcja zwraca wynik take w postaci rzeczywistej.

69

BvupMJTQ!!qsbluzd{oz!lvst

Qs{zlbe!3
Comand: (- 12 4)

8
Command:
Command: (- 12.0 4)

8.0
Command:
Command: (- 12.0)

-12.0
Command:

Skorzystalimy tutaj z wbudowanej funkcji AutoLISPu, realizujcej arytmetyczn


operacj odejmowania. Funkcja zwraca rnic pierwszej liczby i sumy liczb kolejnych.
Jeeli funkcja posiada tylko jeden argument, wwczas jest on odejmowany od zera.

Qs{zlbe!4
Comand: (* 2 3 4)

24
Command:
Command: (* 2.0 3 4)

24.0
Command:

Skorzystalimy tutaj z wbudowanej funkcji AutoLISPu, realizujcej arytmetyczn


operacj monenia. Funkcja zwraca iloczyn wszystkich argumentw.

Qs{zlbe!5
Command: (/ 20 4)

5
Command:

Command: (/ 20 4.0)

5.0
Command:

Command: (/ 20 4 2)

2
Command:

Command: (/ 20.0 4 2)

2.5
Command:

4/![sp{vnjfojf!joufsqsfufsb!BvupMJTQv

6:

Skorzystalimy tutaj z wbudowanej funkcji AutoLISPu, realizujcej arytmetyczn operacj dzielenia. Funkcja zwraca iloraz pierwszego elementu przez drugi. Przy wikszej
liczbie argumentw, dzieli pierwszy z nich przez iloczyn pozostaych.
Przykad  i  ilustruj, jak funkcja obcina cz dziesitn ilorazu bdcego wynikiem operacji na liczbach cakowitych. Musisz o tym pamita, by mc to wiadomie
wykorzysta, nie za otrzymywa wyniki niezgodne z Twoimi oczekiwaniami.
Wynik dziaania arytmetycznego zaley od typu danej. Jeeli wszystkie dane s
typu cakowitego (integer), wwczas wynik jest rwnie typu cakowitego. Wynik
dzielenia danych typu cakowitego jest czci cakowit ilorazu. Jeeli jednym
z argumentw jest dana typu rzeczywistego (real), wwczas wynik jest rwnie
dan typu rzeczywistego. Uwaga ta dotyczy take niektrych innych funkcji
matematycznych.

Omwione funkcje pozwalaj dostrzec pierwsze praktyczne wykorzystanie AutoLISPu.


Daj nam one moliwo uycia AutoLISPu jako do prymitywnego kalkulatora.
Na koniec tego punktu wypada jeszcze wspomnie o sposobie oszacowywania wartoci
wyrae przez AutoLISP. Ot w interpreterze AutoLISPu znajduje si modu o nazwie
List Evalueter. Zadaniem tego moduu jest wanie oszacowanie wartoci podanego
wyraenia. List Evalueter do oszacowania pobiera w kolejnoci lewy atom najbardziej
zagniedonej listy.
Sposb oszacowania wartoci wyrae wyjaniaj ponisze przykady:

Qs{zlbe!6
Poziomy zagniedenia list:
1 2
2 2
21
(* (+ 1 2) (/ 8 2.0))

Kolejno szacowania przez AutoLISP:


(* 3 (/ 8 2.0))
(* 3
4.0 )
12.0

poziom 2 lewy
poziom 2 prawy
poziom1 wynik

Qs{zlbe!7
Poziomy zagniedenia list:
1 2 3 4
4
3 3
3 2
1
(* (- (+ (/ 6.0 2.0) 4.0) (/ 10.0 2) ) 3.0)

71

BvupMJTQ!!qsbluzd{oz!lvst
Kolejno szacowania przez AutoLISP:
(* ( (+ 3.0 4.0) (/ 10.0 2) ) 3.0)
(* (
7.0 (/ 10.0 2) ) 3.0)
(* (
7.0 5.0 ) 3.0)
(*
2.0
3.0)
6.0

poziom 4
poziom 3 lewy
poziom 3 prawy
poziom 2
poziom 1 wynik

Qs{zlbe!8
Poziomy zagniedenia list:
1 2
2 2
3
32 2
3
321
(+ (* 2 3) ( 10 (/ 8 2.0)) (+ 2 (* 3.0 15)))

Kolejno szacowania przez AutoLISP:


(+ (* 2 3)
(+ (* 2 3)
(+ 6
(+ 6
(+ 6

( 10
( 10
( 10
6.0
6.0
59.0

4.0) (+ 2 (* 3.0 15)))


4.0) (+ 2 45.0))
4.0) (+ 2 45.0))
(+ 2 45.0))
47.0)

poziom 3 lewy
poziom 3 prawy
poziom 2 lewy
poziom 2 rodkowy
poziom 2 prawy
poziom 1 wynik

Rozdzia ten zapozna Ci ze sposobem szacowania wyrae przez AutoLISP. Wyraenie jest najbardziej podstawowym elementem programu. AutoLISP natychmist wykonuje kade wyraenie i zwraca jego warto.
Jednym z podstawowych bdw programowania w AutoLISPie jest za kolejno
nawiasw w wyraeniu, co prowadzi do bdnych wynikw (pod warunkiem poprawnoci wyraenia pod wzgldem skadniowym). Aby zminimalizowa liczb bdw z tego
powodu, proponuj podzia dugich wyrae na mniejsze, podstawienie ich wartoci
zwrotnych pod dodatkowe zmienne i wykorzystanie tych zmiennych przy zapisie
caoci wyraenia.
Przykadowo, wyraenie
(setq wynik (/ (* 2.0 (+ 1 2 3))(/ 10 (* 1.0 2))))

proponuj zapisa w postaci:

4/![sp{vnjfojf!joufsqsfufsb!BvupMJTQv

72

(setq
a (* 2.0 (+ 1 2 3))
b (/ 10 (* 1.0 2))
wynik (/ a b)
);setq

Zapis taki uatwia konstrukcj wyraenie oraz kontrol jego wartoci czstkowych.
W nastpnym rozdziale omwimy oglny zarys programu w AutoLISPie,
rozpoczniemy take praktyczn nauk programowania.

73

BvupMJTQ!!qsbluzd{oz!lvst

You might also like