Professional Documents
Culture Documents
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.
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)
4/![sp{vnjfojf!joufsqsfufsb!BvupMJTQv
68
Qs{zlbe!2
Command: (+ 1 2 3)
6
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:
Qs{zlbe!4
Comand: (* 2 3 4)
24
Command:
Command: (* 2.0 3 4)
24.0
Command:
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.
Qs{zlbe!6
Poziomy zagniedenia list:
1 2
2 2
21
(* (+ 1 2) (/ 8 2.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)))
( 10
( 10
( 10
6.0
6.0
59.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))))
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