CATEGORII DOCUMENTE |
Evaluarea este procesul prin care AutoLISP-ul determina valoarea unui obiect. Evaluarea se aplica si la atomi si la liste.
Fiecare obiect din AutoLISP are o valoare. Prin evaluarea unui obiect, AutoLISP-ul determina valoarea acestuia.
in acest capitol veti studia:
Procesul evaluarii
Cum returneaza AutoLISP-ul o valoare
Cum evalueaza AutoLISP-ul atomi si liste
Cum se folosesc functiile aritmetice de baza in AutoLISP
Cum se anuleaza evaluarea unui obiect
Cum leaga AutoLISP-ul o valoare de o variabila
Cind transmiteti un obiect spre evaluare AutoLISP-ului, acesta ii determina valoarea si o returneaza. intr-un exemplu anterior, folosind caracterul '!', AutoLISP-ul a evaluat obiectul pi si a returnat valoarea AutoCAD-ului. AutoCAD-ul a tiparit valoarea returnata in zona liniei de comanda.
Command: !pi
<--- valoare returnata
intr-un exemplu anterior folosind comanda ARRAY, AutoLISP-ul a evaluat lista (/ 360 15) si a returnat valoarea 24 AutoCAD-ului. AutoCAD-ul a folosit valoarea returnata la intrare in comanda ARRAY.
Center point of array: 5,5
Number of items: (/ 360 15)
Angle to fill (+=ccw, -=cw) <360>:Enter
Figura 6. AutoLISP returneaza valoarea expresiei in linia de comanda AutoCAD.
Atomii sint obiecte simple si sint evaluati folosind reguli simple potrivit tipului lor de date. Majoritatea atomilor se autoevalueaza. Numerele intregi, numerele reale, sirurile, se autoevalueaza la valoarea pe care o au. Modul in care se evalueaza un simbol nu poate fi discutat decit dupa ce invatam cum se leaga o lista.
Tip de atom |
Exemplu |
Regula de evaluare |
Valoare |
Intreg |
Valoarea este nr. insusi | ||
Real |
Valoarea este nr. insusi | ||
Sir |
'text' |
Valoarea este nr. insusi |
'text' |
Simbol |
x |
Legarea curenta |
Ultima asignare |
Tabelul 6. Reguli de evaluare a atomilor
Evaluarea unei liste poate fi facuta intr-unul din aceste doua moduri: se ia lista ca atare sau se evalueaza. in functie de natura listei, metodele dau rezultate diferite,de exemplu, valori diferite.
Daca o lista este luata ca atare, atunci valoarea ei este lista insasi. Acest lucru va fi mai clar dupa explicarea functiei quote mai tirziu in aceasta lectie.
Daca o lista urmeaza a fi evaluata de AutoLISP, atunci trebuie respectata regula sintactica.
Pentru orice lista care poate fi evaluata, primul element din cadrul listei trebuie sa fie o functie.
Listele sint evaluate potrivit instructiunilor referitoare la primul element al listei. Daca primul element este numele unei subrutine interne AutoLISP sau functii, restul de elemente ale listei sint transferate functiei ca argumente formale si sint evaluate de catre functie.
Functiile sint fie functii interne AutoLISP, fie subrutine, asa cum sint cele prezentate in capitolul 4 al manualului AutoLISP Programmer's Reference Manual, fie functii externe definite de utilizator sau exsubr definite de aplicatii ADS, sau functii AutoLISP definite de utilizator.
Vom folosi o lista simpla pentru a ilustra procesul de evaluare a unei liste.
Aceasta este o lista formata din trei elemente: functia + numerele intregi 1 si 2.
Primul element al unei liste pe care AutoLISP-ul o poate evalua trebuie sa fie o functie.
AutoLISP-ul verifica primul element al listei unde se asteapta sa gaseasca o functie. Daca primul element al listei pe care AutoLISP-ul incearca sa o evalueze nu este o functie, acesta va da nastere unei erori.
Elementele care urmeaza dupa o functie in cadrul unei liste sint argumentele functiei; adica ele reprezinta datele asupra carora functia opereaza.
AutoLISP evalueaza functia. O functie evalueaza un set de instructiuni care sugereaza AutoCAD-ului cum sa actioneze mai departe.
Functia + evalueaza un set de instructiuni pentru AutoLISP. Daca ar fi sa exprimam in cuvinte aceste instructiuni, am putea spune: gasiti valoarea fiecarui element din aceasta lista. Care sint argumentele functiei? Puneti toate valorile la un loc si returnati rezultatul ca fiind valoarea intregii liste.
Urmarind instructiunile din functia +, AutoLISP-ul gaseste valoarea urmatorului element din lista: numarul intreg 1. Numerele intregi se evalueaza pe sine. Astfel AutoLISP-ul memoreaza valoarea 1 in stiva programului, de exemplu o introduce intr-o locatie de memorie temporara.
Continind cu instructiunile de la functia +, AutoLISP-ul verifica daca mai sint si alte elemente in lista. Mai exista un element: numarul intreg 2. AutoLISP-ul ii pastreaza valoarea in stiva.
Nemaigasind alte elemente in lista, de exemplu argumente la functie, AutoLISP-ul isi termina instructiunile de la functia + prin adaugarea valorilor argumentelor 1 si 2 si prin returnarea numarului intreg 3 ca fiind valoarea listei.
Command: (+ 1 2)
3
Command:
AutoLISP evalueaza elementele dintr-o lista de la stinga la dreapta.
in multe cazuri ar fi convenabil pentru noi sa urmam procesul de evaluare din interior spre exterior decit de la dreapta spre stinga. Rezultatele sint de obicei aceleasi si adesea este mai usor pentru noi sa citim coduri AutoLISP cu un grad de imbricare mai mare, lucrind din interior in exterior. Dar nu acesta este modul in care AutoLISP-ul evalueaza o lista. intotdeauna lucreaza de la stinga la dreapta.
Considerati aceasta lista formata din trei elemente:
Functia
Atomul
Lista
Figura 7. Evaluarea unei liste complexe
AutoLISP-ul evalueaza aceasta lista folosind exact aceeasi metoda ca in exemplul anterior.
AutoLISP-ul cauta primul element al listei asteptind sa gaseasca o functie si apoi o evalueaza. Functia returneaza valoarea ei ca un set de instructiuni pentru AutoLISP.
Urmind instructiunile functiei +, AutoLISP-ul afla valoarea celui de al doilea element al listei, de ex. primul argument la functia +: atomul 1. Apoi ii memoreaza valoarea si continua.
AutoLISP-ul gaseste valoarea celui de al treilea element al listei, cum ar fi al doilea argument la functia +.
Al treilea element este el insusi o lista. Cum afla AutoLISP-ul valoarea unei liste? Prin evaluare. Cum evalueaza AutoLISP-ul o lista?
Mai intii evalueaza functia + si ii primeste instructiunile
Apoi gaseste valoarea argumentelor 2 si 3. Terminindu-i instructiunile de la functia + din cadrul listei AutoLISP-ul adauga valorile si returneaza rezultatul care in acest caz este nr. intreg 5.
Nemaigasind alte elemente in lista, AutoLISP-ul termina instructiunile de la functia + in lista principala prin adaugarea valorii celor doua elemente la un loc si returnind valoarea 6.
AutoLISP-ul include functii interne pentru operatii aritmetice ca: adunarea, scaderea, inmultirea si impartirea
functia de adunare
functia de scadere
functia de inmultire
functia de impartire
Expresii aritmetice |
S-expresii AutoLISP |
Tabelul 7. Aritmetica AutoLISP
Ordinea argumentelor in functiile de adunare si de inmultire nu are importanta. Este insa importanta pentru scadere si impartire.
Fig. 8 Ordinea argumentelor in functia de scadere
in cazul scaderii, valoarea celui de al doilea argument este scazuta din valoarea primului argument si rezultatul returnat este valoarea listei.
Fig. 9 Ordinea argumentelor in functia de impartire
in cazul impartirii, valoarea celui de al doilea argument este divizorul valorii primului argument.
Iata citeva exemple complexe.
Expresii aritmetice |
S-expresii AutoLISP |
Tabelul 8. Exemple complexe de expresii aritmetice
AutoLISP-ul determina valoarea unui obiect prin evaluare.
AutoLISP-ul returneaza valoarea fiecarui obiect pe care il evalueaza.
Majoritatea atomilor se evalueaza pe sine.
Simbolurile se evalueaza prin legare sau atribuire.
Listele sint evaluate printr-un proces standard.
Primul element al oricarei liste ce poate fi evaluata trebuie sa fie o functie.
AutoLISP-ul are functii standard pentru operatii aritmetice.
exercitiul 2: liste si aritmetica listelor
in acest exercitiu veti:
Consolida cunostintele despre procesul de evaluare
incepe scrierea expresiilor AutoLISP folosind listele
Transforma expresiile aritmetice in expresii AutoLISP
Transforma expresiile AutoLISP in expresii aritmetice
Folositi functia +, -, /, si *.
Transformati expresiile aritmetice in expresii AutoLISP.
Scrieti raspunsurile in coloana din dreapta.
Expresia in notatia aritmetica standard:
Expresia in AutoLISP:
Expresii aritmetice |
S-expresii |
Tabelul 9. Traducerea expresiilor aritmetice
Transformati s-expresiile in expresii aritmetice
Scrieti raspunsurile in coloana din dreapta
Expresia in notatia aritmetica standard
Expresia in AutoLISP
s-expresii |
expresii aritmerice |
Tabelul 10. Traducerea expresiilor AutoLISP
Valoarea unei liste poate fi determinata in unul din aceste doua moduri: se evalueaza lista sau se considera lista ca atare.
Functia AutoLISP quote este folosita pentru a returna o lista sau un atom neevaluat, adica la valoarea ca lista.
Folositi quote ca fiind primul element intr-o lista si adaugati un singur argument. Valoarea listei va fi valoarea neevaluata a celui de al doilea element al listei, adica argumentul la quote.
Aceasta expresie returneaza lista (1.0 2.0 3.0) neevaluata.
Command: (quote (1.0 2.0 3.0))
Ce s-ar intimpla daca AutoLISP-ului i s-ar cere sa evalueze lista?
De ce?
Command: (1.0 2.0 3.0)
Legarea este procesul prin care o valoare este atribuita unui simbol definit de utilizator sau unei variabile. in AutoLISP, spunem ca la un simbol sau la o variabila se leaga o valoare. Aceasta inseamna in limbajul BASIC ca o valoare este egala de o variabila sau ca o valoare este atribuita unei variabile.
Functia AutoLISP setq se foloseste pentru a lega un simbol sau o variabila de o valoare.
Aceasta expresie leaga simbolul x de valoarea 4.5.
Command: (setq x 4.5)
Command: !x
in BASIC, aceeasi operatie ar putea fi exprimata astfel:
LET x = 4.5
Valoarea functiei setq este un set de instructiuni pentru AutoLISP.
Aceste instructiuni ar putea fi exprimate astfel: Luati primul argument ca atare. Nu-l evaluati. Gasiti valoarea celui de al doilea argument. Legati primul argument de valoarea celui de al doilea argument. Returnati valoarea legarii ca fiind valoarea listei.
Notati returnarea valorii acestei expresii. Valoarea listei este valoarea legaturii stabilite pentru simbolul x de catre functia setq.
Command: (setq x 4.5)
Functia quote suprima procesul de evaluare.
Legarea este procesul de atribuire a unei valori la o variabila.
Functia setq este folosita pentru a lega o variabila de o valoare.
exercitiul 3: evaluarea listelor si legarea variabilelor
in acest exercitiu veti:
Consolida cunostintele despre procesul de evaluare
Determina daca o lista poate fi evaluata fara erori
Consolida cunostintele despre procesul de legare
Folosi functia setq pentru a lega variabile de valori, adica veti atribui valori variabilelor
Determinati daca o lista poate fi evaluata sau trebuie considerata ca atare.
Puneti un semn in coloana corespunzatoare
s-expresii |
Evaluari? |
Numai fata valorii? |
(quote (1.0 2.0 3.0)) | ||
(setq x 4.5) | ||
(setq y (1.0 2.0 3.0)) | ||
(y (1 2)) |
Tabelul 11. Determinarea situatiei in care o lista poate fi evaluata
Legati variabila x de valorile din tabel
Folositi functia setq si functia quote daca este necesar
Verificati valoarea variabilei folosind 'bang' pentru a-i afla legarea curenta.
Command: (setq x 1)
Command: !x
Command:(setq x (+ 1 2 3))
Command: !x
Command: (setq x (quote (4 (+ 5 6)))
Command:!x
Valoare pentru x |
'text' |
Tabelul 12. Legarea lui x unor valori diferite
Aceasta pagina este lasata libera in mod intentionat.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1169
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved