Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Evaluarea AutoLISP

autocad



+ Font mai mare | - Font mai mic



Evaluarea AutoLISP

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.



Obiective

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

Returnarea valorii

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.

Evaluarea atomilor

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 listelor

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.

Cum evalueaza AutoLISP-ul o lista

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.

Etapa I: Analiza primului element

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.

Etapa a II-a: Evaluarea functiei

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.

Etapa a III-a: Continuarea instructiunilor functiei

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.

Etapa a IV-a: Returnarea valorii functiei

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:

Un exemplu mai complex

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.

Functii aritmetice

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

Exemple

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.

Exemple

Expresii aritmetice

S-expresii AutoLISP

Tabelul 8. Exemple complexe de expresii aritmetice

Recapitulare

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

Partea I

Folositi functia +, -, /, si *.

Transformati expresiile aritmetice in expresii AutoLISP.

Scrieti raspunsurile in coloana din dreapta.

Exemplu

Expresia in notatia aritmetica standard:

Expresia in AutoLISP:

Expresii aritmetice

S-expresii

Tabelul 9. Traducerea expresiilor aritmetice

Partea a II-a

Transformati s-expresiile in expresii aritmetice

Scrieti raspunsurile in coloana din dreapta

Exemplu

Expresia in notatia aritmetica standard

Expresia in AutoLISP

s-expresii

expresii aritmerice

Tabelul 10. Traducerea expresiilor AutoLISP

Liste neevaluate

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.

Exemplu

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)

Operatia de legare a doua obiecte

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.

Exemplu

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

Cum functioneaza functia setq

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.

Exemplu

Notati returnarea valorii acestei expresii. Valoarea listei este valoarea legaturii stabilite pentru simbolul x de catre functia setq.

Command: (setq x 4.5)

Recapitulare

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

Partea I

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

Partea a II-a

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.

Exemplu

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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1084
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved