Professional Documents
Culture Documents
TCCN Sem. 1 C2
Curs Nr. 2
1.10. Funcii alternativ
AutoLISP folosete urmtoarele funcii alternativ:
1.10.1. (IF expresie_de_test expresie_da [expresie_nu])
Aceast funcie evalueaz expresie_de_test. Dac rezultatul acestei evaluri este diferit de nil
atunci se evalueaz expresie_da. Dac expresie_de_test este nil este evaluat expresie_nu dac
aceasta este prezent, iar dac nu, funcia if se ncheie fr efect.
1.10.2. (COND
(expresie_de_test_1 expresie_1)
(expresie_de_test_2 expresie_2)
(expresie_de_test_n expresie_n)
)
Aceast funcie evalueaz pe rnd expresiile expresie_de_test_j pn cnd o ntlnete pe
prima care este diferit de nil i evalueaz expresia expresie_j corespunztoare.
Se poate construi o alternativ default (ca n limbajul C la instruciunea switch), astfel:
(COND
(T expresie_prestabilit)
)
Aceast funcie este folosit n acele funcii care accept un singur argument specific, ca de
exemplu IF i COND, atunci cnd este nevoie, totui, s se efectueze o succesiune de evaluri.
Funcia returneaz ca rezultat ultima evaluare efectuat (pe aceea a lui expresie_n).
n cazul funciei IF, folosirea funciei progn conduce la o structur de forma:
(if test (progn () () ) (progn () ()))
Dumitru Dragomir
TCCN Sem. 1 C2
oprit (celelalte expresii nu mai sunt evaluate) i este returnat rezultatul nil. Dac toate expresiile
numerice au fost evaluate i au fost egale cu en1 este returnat ca rezultat T.
1.13.2. (/= en1 en2 enn)
Aceast funcie evalueaz expresiile numerice en1 enn, n ordine de la stnga la dreapta
i returneaz nil la ntlnirea primei evaluri care produce un rezultat de egalitate cu oricare
dintre expresiile evaluate anterior, oprind evaluarea celorlalte expresii. Dac evaluarea tuturor
expresiilor a produs rezultate diferite, este returnat T.
1.13.3. (< en1 en2 enn)
Aceast funcie evalueaz expresiile numerice en1 enn, n ordine de la stnga la dreapta i
returneaz nil la ntlnirea primei evaluri care produce un rezultat mai mic sau egal cu evaluarea
anterioar, oprind evaluarea celorlalte expresii. Dac toate evalurile au produs rezultate care sunt
strict cresctoare, este returnat T.
1.13.4. (<= en1 en2 enn)
Aceast funcie evalueaz expresiile numerice en1 enn, n ordine de la stnga la dreapta i
returneaz nil la ntlnirea primei evaluri care produce un rezultat mai mic dect evaluarea
anterioar, oprind evaluarea celorlalte expresii. Dac toate evalurile au produs rezultate care sunt
cresctoare, este returnat T.
1.13.5. (> en1 en2 enn)
Aceast funcie evalueaz expresiile numerice en1 enn, n ordine de la stnga la dreapta i
returneaz nil la ntlnirea primei evaluri care produce un rezultat mai mare sau egal cu
evaluarea anterioar, oprind evaluarea celorlalte expresii. Dac toate evalurile au produs
rezultate care sunt strict descresctoare, este returnat T.
1.13.6. (>= en1 en2 enn)
Aceast funcie evalueaz expresiile numerice en1 enn, n ordine de la stnga la dreapta i
returneaz nil la ntlnirea primei evaluri care produce un rezultat mai mare dect evaluarea
anterioar, oprind evaluarea celorlalte expresii. Dac toate evalurile au produs rezultate care sunt
descresctoare, este returnat T.
1.14. Funcii de prelucrare a listelor
Fiind un limbaj de prelucrare de liste, AutoLISP folosete o serie de funcii destinate acestui
scop, dup cum urmeaz:
1.14.1. (CXXXXR list)
n funcia de mai sus avem de a face cu o notaie generic, X putnd fi A sau D, rezultnd
combinaii de funcii CAR i CDR pn la nivelul 4. De exemplu:
(CADR (list a b c d)) produce acelai rezultat ca i (CAR (CDR (list a b c d))) adic evaluarea
simbolului b.
1.14.2. (REVERSE list)
Aceast funcie returneaz o list inversat. De exemplu:
(reverse (list (list a b) c (list d e f) g h)) returneaz lista
(h g (d e f) c (a b))
Se observ din exemplul de mai sus c sublistele interne sunt tratate ca simple argumente
nefiind afectate de inversare.
1.14.3. (ASSOC articol list_asociativ)
Pentru a nelege modul de lucru al acestei funcii reamintim efectul funciei CONS: cnd
ambele argumente sunt atomi funcia returneaz o pereche cu punct.
O list asociativ este o list avnd ca elemente subliste formate din perechi cu punct de tipul
(a . b), sau asociaii.
Dac articol exist n interiorul unei subliste a listei asociative, atunci funcia ASSOC
returneaz prima pereche cu punct ntlnit, care conine argumentul articol, ignornd celelalte
subliste care urmeaz acesteia (chiar dac printre ele se mai gsesc i altele care conin articolul).
Dumitru Dragomir
TCCN Sem. 1 C2
De exemplu:
(setq l (list (cons c 1) (cons a 2) (cons a 3) (cons b 2)))
(assoc a l) returneaz sublista (a . 2), aceasta fiind prima ntlnit care conine atomul a.
returneaz 6.
Dumitru Dragomir
TCCN Sem. 1 C2
Dumitru Dragomir
TCCN Sem. 1 C2
De exemplu:
(defun c:tri ()
(command line (0 0) (2 0) (1 2) C)
)
Aceast funcie definete o comand nou cu numele TRI. Scriind acest nume ca linie de
comand AutoCAD, programul va desena un triunghi isoscel cu vrfurile n punctele de
coordonate 0,0, 2,0 i 1,2.
1.17. Comunicarea prin AutoLISP
AutoLISP permite comunicarea cu mediul de aplicaie AutoCAD (n principal cu interpretorul de
comenzi al acestuia, dar i cu alte faciliti), folosind urmtoarele categorii de funcii:
1.17.1. Funcii de conversie valoric
1.17.1.1. (ANGTOS unghi [mod [precizie]])
Aceast funcie convertete valoarea argumentului unghi exprimat n radiani ntr-un ir de
caractere.
Argumentul mod ndeplinete rolul variabilei de sistem AUNITS din AutoCAD, care
stabilete unitile de exprimare a unghiurilor.
Argumentul precizie ndeplinete rolul variabilei de sistem AUPREC din AutoCAD, care
stabilete precizia de exprimare a unghiurilor.
Dac mod i precizie sunt omise, conversia este fcut conform strii variabilelor de sistem
menionate. Dac argumentele sunt menionate, sunt folosite urmtoarele valori i semnificaii:
Pentru argumentul mod
0 grade sexagesimale exprimate cu punct zecimal
1 grade minute secunde
2 grade centesimale
3 radiani
4 uniti de navigaie
De exemplu:
(setq p1 (5.0 1.33) p2 (2.4 1.33) a (angle p1 p2))
returneaz 180
(angtos a 0 0)
(angtos a 0 4)
returneaz 180.0000
(angtos a 1 4)
returneaz 180d00
(angtos a 4 2)
returneaz W.
Dumitru Dragomir
(itoa 2)
(itoa 2.3)
TCCN Sem. 1 C2
returneaz 2
produce mesajul error: bad argument type.
Dumitru Dragomir
TCCN Sem. 1 C2