Documente Academic
Documente Profesional
Documente Cultură
AutoLISP C1
AutoLISP C1
AutoLISP C1
Numele unei entiti este o etichet numeric asociat obiectelor din desen i reprezint un
pointer ntr-un fiier gestionat de AutoCAD - baza de date curent. Entitile pot fi manipulate prin
funcii ent* (entdel, entget, entlast, entmake, entmakex, entmod, entnext, entsel, entupd).
Descriptorii de fiiere sunt etichete alfanumerice asociate fiierelor deschise n AutoLISP.
Fiierele sunt manipulate cu ajutorul funciilor: open, close, findfile, getfiled, read, read-char, readline, write-char, write-line
Toate expresiile AutoLISP au forma: (funcie argumente), semnificnd aplicarea funciei
asupra argumentelor. Argumentele pot avea tipuri precum: ntreg, real, ir de caractere, list,
mulime de selecie, nume de entitate, descriptor de fiier, identificatori, variabile, subrutine interne
i subrutine externe.
Subrutinele interne (built-in) sunt funciile standard AutoCAD. O parte a funciilor standard
este prezentat n seciunea 1.3. Comenzile definite prin ARX (arx, arxload, arxunload,
autoarxload) sau aplicaii AutoLISP se numesc subrutine externe.
Dac dorim ca evaluarea s fie blocat, adic lista nu este o funcie, atunci se utilizeaz
funcia QUOTE. Astfel (quote (a b c)), scriere echivalent i cu '(a b c), furnizeaz lista (a, b, c),
fr a se ncerca vreo evaluare. Astfel, (quote ((+ 3 5) (* 4 5) (sqrt 16))) returnez construcia: ((+ 3
5) (* 4 5) (SQRT 16)), i nu lista (8 20 4). Observm c funcia QUOTE are rolul identitii.
Atunci cnd dorim formarea unei liste din componente care mai nti se evalueaz folosim
funcia list. Prin urmare (list (+ 3 5) (* 4 5) (sqrt 16)) va produce (8 20 4.0).
1.3 Antrenamente AutoLISP - 1
1.3.1. Operatori AutoLISP
Presupunem c sistemul AutoCAD a fost activat. Redimensionm fereastra text (unde apare
promptul Command: Ne vom familiariza, mai nti, cu operatorii AutoLISP. Acetia sunt: +
(adunare), - (scdere), * (nmulire), / (mprire dependent de natura operanzilor), = (egal cu), /=
(diferit de), < (mai mic dect), <= (mai mic dect sau egal cu), > (mai mare dect), >= (mai mare
dect sau egal cu), ~ (negare bit cu bit complementul fa de 1), 1+ (incrementare cu 1), 1(decrementare cu 1).
n linia de comand, scriei expresia AutoLISP, apoi apsai tasta ENTER () i privii
rezultatul afiat. Iniial urmrii secvena de dialog urmtoare:
Command: (+)
0
Command: (+ PI)
3.14159
Command: (+ 1 2)
3
Command: (+ 1 2 3 4)
10
Observai c dac lista nu conine argumente, atunci rezultatul obinut este zero. Dac exist un
singur argument rezultatul final se obine prin adunarea elementului neutru zero. Dac lista
conine dou sau mai multe argumente, atunci funcia returneaz suma tuturor argumentelor. n cele
ce urmeaz o astfel de situaie va fi exemplificat astfel:
(+) -> 0
(+ PI) -> 3.14159
(+ 1 2) -> 3
(+ 1 2 3 4) -> 10
(* PI 2) -> 6.28319 ; 2
(* 1 2 3 4 5) -> 120 ; 5! (factorial)
(/) -> 0
(/ 4) -> 4
(/ 1.0 4) -> 0.25
(/ 24 3 2) -> 4
(=) ->
error: too few arguments
(=)
*Cancel*
(= 4 4) -> T
(= 4 4.0) -> T
(/= 4) -> T
(/= 4 4) -> nil
(/= nil NIL) -> nil
(/= 4 4.0) ->nil
(/=) ->
error: too few arguments
(/=)
(<) ->
error: too few arguments
(<)
(< 1) -> T
(< 1 2) -> T
(< 2 1) -> nil
(< 1 2 3 4 5) -> T
(< "AutoCAD" "AutoLISP") ->T
(<=) ->
error: too few arguments
(<=)
(<= 2) -> T
(<= 2 3) -> T
(<= 2 2 4 6 6 8 9) -> T
Operaiile la nivel de bit se realizeaz cu ajutorul funciei Boole prin specificarea codului operaiei
dorite (1 pentru AD, 6 pentru XOR6, 7 pentru OR i 8 pentru OR7) i a operanzilor de tip ntreg,
conform sintaxei:
(Boole cod_funcie arg1 arg2 ...)
Exersai dup modelul urmtor. Pentru a nelege rezultatul obinut trebuie s considerai irurile
binare asociate argumentelor.
(Boole 1 1961 25) -> 9
(Boole 6 1961 25) -> 1968
(Boole 7 1961 25) -> 1977
(Boole 8 1961 25) -> -1978
(Boole 8 0 0) -> -1
(Boole 8 1 1) -> -2
(Boole 8 32767 0) -> -32768
(Boole 8 0 -32768) -> 32767
Funcia atom, utilizat n expresia (atom argument), testeaz dac valoarea evaluat a argumentului
este un atom. Funcia equal, utilizat n expresia (equal argument1 argument2), returneaz T dac
evalurile celor dou argumente coincid. Altfel se obine valoarea nil. Funcia eq din expresia (eq
argument1 argument2) returneaz T dac cele dou argumente se refer la acelai obiect. Dac
evaluarea unui argument conduce la valoarea nil, atunci funcia null, n expresia (null argument),
returneaz valoarea T. Funcia member este prezent n expresii cu structura (member argument1
argument2) i returneaz nil dac valoarea evaluat a primului argument nu se afl printre
componentele celui de-al doilea argument, care trebuie s fie o list. n caz contrar se obine sublista
care conine pe argument1 ca prim element i pe toate celelalte elemente care i urmau n argument2.
Exersai dup modelele de mai jos:
(atom "a") -> T
(atom 1 2 3) -> T
(atom '(1 2 3)) -> nil
(atom (list 1 2 3)) -> nil
(equal (list 1 2 3) '(1 2 3)) -> T
(equal 16 (sqrt 256)) -> T
(eq (list 1 2 3) '(1 2 3)) -> nil
(eq 16 (sqrt 256)) -> T
(eq nil (and nil T)) -> T
(null T) -> nil
Exemplele prezentate n aceast parte a lucrrii au fost testate folosind sistemul AutoCAD R14.
Prima form a limbajului LISP (LISt Processing) a fost elaborat de John McCarthy n 1958 pentru manipularea
cunotinelor n cadrul inteligenei artificiale.
A se vedea i capitolul 5, seciunile 5.1 i 5.2 din lucrarea [1]. LISP utilizeaz scrierea n preordine a expresiilor.
Astfel, n loc s scriem 3 + 5, vom scrie (+ 3 5).
4
Programatorul trebuie s nchid corect parantezele. Dac testai n mod comand anumite expresii, iar numrul
parantezelor dreapta este mai mic dect numrul parantezelor stnga, AutoCAD afieaz un prompt care indic numrul
parantezelor care lipsesc.
Dac introducem (* 3 atunci se afieaz
1>
n aplicaii AutoLISP o astfel de situaie este semnalat ca o eroare.
5
Secvenele escape uzuale sunt: \\ (pentru \), \e (pentru ESC), \n (pentru LF), \r (pentru CR), \t (pentru TAB). De
asemenea, utilizatorul trebuie s cunoasc semnificaia special a unor caractere: parantezele rotunde (specificarea
listelor), spaiul delimitator, ; - arat iniierea unui comentariu de tip linie, punctul specificarea perechilor asociative,
ghilimelele delimitarea irurilor de caractere.
6
Este vorba de operaia SAU Exclusiv care conduce la valoarea 1 numai pentru combinaiile (1, 0) i (0, 1). Altfel se
obine valoarea 0.
7