47398143 Lectii LISP Romana

download 47398143 Lectii LISP Romana

of 259

Transcript of 47398143 Lectii LISP Romana

  • 8/2/2019 47398143 Lectii LISP Romana

    1/259

    AutoLISP

    Introducere

    AutoLISP-ul este un limbaj de programare pentru AutoCAD. Acest cursofer cursantului posibilitatea de a-i nsui cunotine practice de lucru nAutoLISP prin cursuri i texte care explic structura i sintaxa limbajului irelaia acestuia cu AutoCAD-ul. Prin exerciii aplicative la teoria de

    programare i exemple concrete cursantul i completeaz aceste cunotine.

    Acest curs reprezint o culegere de texte i un ghid pentru un cursAutoLISP pe o perioada de 3 zile, oferit de Autodesk, Inc. TrainingDepartment. La exerciiile de proiectare se adaug lecii suplimentare idiscuii la obiect. Acest curs poate fi folosit individual atunci cnd este ncombinaie cu o dischet ce conine fiierele necesare pentru rezolvareaexerciiilor.

    Acest curs este bazat pe o versiune AutoLISP ce poate fi gsit pe toateplatformele pe care este implementat AutoCAD R12.

    Obiective

    La sfritul acestui curs, cursantul va fi capabil s neleag sintaxaAutoLISP, o varietate de funcii standard i procesul de evaluare Lisp.Cursantul va putea folosi AutoLISP-ul pentru:

    Utilizarea comenzilor AutoCAD prin intermediul funciilorde baz AutoLISP.

    Crearea de noi funcii AutoLISP.

    Crearea de noi funcii AutoCAD pe baza limbajuluiAutoLISP.

    Corectarea i modificarea entitilor din baza de date a

    AutoCAD-ului. Citirea i scrierea n fiiere cu texte ASCII cu ajutorul

    limbajului AutoLISP.

    Combinarea programelor de tip AutoLISP cu fiiereleAutoCAD de tip script.

    50099176.doc R.2.1 9/21/2011 ATC. Iasi 1

  • 8/2/2019 47398143 Lectii LISP Romana

    2/259

    AUTODESK, INC.

    Cuprins

    Acest material cuprinde subiectele prezentate mai jos. Explicarea acestorsubiecte reprezint coninutul principal al capitolelor de mai jos.

    Introducere.....................................................................................................1Generaliti.....................................................................................................3

    Expresii simbolice..........................................................................................7

    Atomi i liste................................................................................................13

    Evaluri .......................................................................................................21

    Expresii simbol AutoLISP far comenzi AutoCAD....................................35

    Tipuri de date numerice...............................................................................41

    Puncte AutoCAD i liste AutoLISP.............................................................47Prelucrare de liste.........................................................................................57

    Comenzi AutoCAD i liste AutoLISP.........................................................71

    Selecie interactiv de puncte.......................................................................79

    Funcii..........................................................................................................87

    Funcii care acioneaz ca i comenzi AutoCAD........................................97

    Fiiere de programare AutoLISP...............................................................101

    Funcia C....................................................................................................105

    Teste logice i condiionale........................................................................113

    Bucle de program.......................................................................................123

    Operaii cu iruri........................................................................................131

    Acces la entiti..........................................................................................139

    Liste asociate entitilor.............................................................................147

    Modificarea unei entiti............................................................................155

    Selectarea grafic a unei entiti................................................................165

    Tratarea erorilor.........................................................................................171

    Operaii cu fiiere.......................................................................................175..........................................................................................................................

    Seturi de selecie........................................................................................193

    Tabele i nume de obiecte..........................................................................203

    Fiiere script i AutoLISP..........................................................................211

    Accesul la entiti simple i la polilinii......................................................217Accesul la entiti simple i la blocuri.......................................................221

    2

  • 8/2/2019 47398143 Lectii LISP Romana

    3/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Crearea entitilor cu funcia entmake.......................................................225

    Crearea poliliniilor i a definitiilor de bloc cu funcia entmake ...............227

    Tratarea irurilor........................................................................................231

    Tratarea entitilor......................................................................................243

    50099176.doc R.2.1 9/21/2011 3

  • 8/2/2019 47398143 Lectii LISP Romana

    4/259

    AUTODESK, INC.

    Generaliti despre AutoLISP

    Ce este AutoLISP-ul ?

    AutoLISP-ul este un dialect al limbajului de programare Lisp utilizat

    pentru completarea posibilitilor de proiectare n AutoCAD.Lisp este un acronim pentru list processing (in alte texte, listprogramming. Este un limbaj de programare superior foarte cunoscut

    pentru aplicaiile lui n domeniul sistemelor specializate, inteligenartificial, programare pe baz de reguli i AutoCAD.

    Lisp este unul dintre limbajele de programare cele mai vechi. Ca iFORTRAN, primele implementri ale limbajului Lisp dateaz din anii 60.Multe sublimbaje ale limbajului Lisp exist n prezent, incluznd CommonLisp, Franz Lisp, Mu Lisp i X Lisp.

    Limbajul Lisp are multe caracteristici care se adreseaz att profesionitilorct i amatorilor.

    AutoLISP are o sintax simpl, precis. Procesul de evaluarei sintaxa folosit pentru crearea expresiilor Lisp sunt uorde nvat.

    Este un interpretor aa nct rezultatele obinute din calculepot fi vizualizate interactiv ntr-o sesiune AutoCAD.

    AutoLISP interacioneaz direct cu AutoCAD fr snecesite programe de sprijin extern, cum ar fi compilatorul.

    Programele AutoLISP snt uor de neles i modificat. AutoLISP-ul este capabil de iteraie i recursivitate.

    Funciile pot utiliza instruciuni condiionale i de startstandard i pot fi definite n aa fel nct o funcie apeleaza larecursiune .

    AutoLISP-ul ncurajeaz programatorul s scrie funciisimple,structurate i s combine aceste funcii cu scopul de acrea programe complexe dar uor de neles.

    Pentru cei ce snt interesai s lucreze cu programe AutoLISP lerecomandm urmtoarele cri:

    Common LISP:A Gentle Introduction to Symbolic Computingde David S.Touretzky; LISP de Winston & Horn Looking at LISPde Tony HasemerCommon LispCraft de Robert Wilensky AutoLISP Programmer's

    Reference Manual.

    Ce poate face AutoLISP-ul ?

    AutoLISP-ul este o scul puternic. Poate fi folosit pentru a adaptaAutoCAD-ul la orice fel de aplicaii, fcnd astfel AutoCAD-ul mai sensibilla modul de lucru. Multe dintre cele mai complicate aplicaii proiectate

    pentru AutoCAD folosesc pe scar larg limbajul de programare AutoLISP.

    4

  • 8/2/2019 47398143 Lectii LISP Romana

    5/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    AutoLISP poate crea subrutine i macrouri puternice. SubrutineleAutoLISP pot fi alctuite din comenzi AutoCAD i funcii AutoLISP i potautomatiza operaii complexe n cadrul AutoCAD-ului.

    Subrutinele AutoLISP pot crea noi funcii AutoLISP i noi comenzi

    AutoCAD care pot fi folosite n linia de comand sau n cadrul fiierelorscript i menu-urilor AutoLISP.

    Cum ncrcm AutoLISP-ul ?

    AutoLISP-ul este o component standard a AutoCAD-ului, portabil petoate mainile de calcul. Interpretorul AutoLISP se ncarc automat lafiecare sesiune AutoCAD.

    AutoLISP opereaz n cadrul editorului grafic AutoCAD. Interpretorul stn "umbr" n timpul unei sesiuni de interpretare grafic ateptnd sevalueze o expresie simbolic introdus n linia de comand a AutoCAD-lui.

    AutoLISP-ul este disponibil numai n cadrul editorului grafic.

    Ce trebuie s tim pentru a folosi AutoLISP-ul ? Cunotinte temeinice de lucru cu AutoCAD.

    Trebuie de asemenea s avei cunotine despre:

    Fiiere script.

    Menu-uri utilizator.n unele cazuri este mai simplu i mai uor s optimizai o secvent dedesenare cu un fiier script sau cu un menu de baz dect s folosii un

    program AutoLISP.

    Ce editor de text ar trebui folosit ?

    Este nevoie de un editor de text ASCII pentru a crea fiiere programAutoLISP pe baza acestui manual.

    Fiierele de text ASCII pot fi ntlnite sub denumirea de fiiere

    "programmer", "non-document" sau "unformatted".

    Versiunea MS-DOS 5.0 a aprut cu un editor de text simplu numit EDIT.Dac folosii versiunea DOS 386 a AutoCAD-ului din acest manual este

    posibil s dorii s folosii acest editor.

    Aplicaia NOTEPAD din Microsoft WindowsTM este un editor de textASCII aa cum este aplicaia Text Editor din Sun MycrosystemsSPARCTM din Open WindowsTM.

    Exist o varietate de editoare de text gratuite i care circul liber pentru

    AutoCAD i AutoLISP n cadrul Forumului CompuServe AutoCAD (GO

    50099176.doc R.2.1 9/21/2011 5

  • 8/2/2019 47398143 Lectii LISP Romana

    6/259

    AUTODESK, INC.

    ACAD). Orice editor profesional de programare este o unealt bun cu carese pot scrie fiiere program AutoLISP.

    Hardware pentru AutoLISP i necesarul de memorie

    Computerul dumneavoastr trebuie s aib hardware-ul i memoria cerutde AutoCAD pentru a putea folosi AutoLISP-ul. Manualele AutoCADInterface iInstallation And Performance Guide prezint cerinele specificefiecrei platforme.

    Lansarea n execuie

    Lansai editorul grafic AutoCAD nainte de a lansa orice alt comanda. Vatrebui s introducei s-expresiile AutoLISP din linia de comand.

    V sugerm s lansai sesiunea de editare grafic ori de cte ori utilizaiacest manual.

    6

  • 8/2/2019 47398143 Lectii LISP Romana

    7/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Expresii simbolice

    Expresiile simbolice snt instruciuni de baz ale limbajului AutoLISP.

    Obiectiven acest capitol vei nva:

    Cum s creai o expresie simbolic

    Cum recunoate AutoCAD-ul expresiile simbolice

    Cum s folosii expresiile simbolice n cadrul comenzilorAutoCAD

    Cum s aflai valoarea unei expresii simbolice

    Instruciuni n AutoLISP

    n principal LISP-ul proceseaz listele: el proceseaz i evalueaz listelede obiecte. AutoLISP-ul proceseaz liste cunoscute ca expresii simbolice,n cadrul AutoCAD-ului.

    Listele snt principalul mijloc de construire a expresiilor simbolice nAutoLISP. O expresie simbolic din AutoLISP poate fi comparat cu o

    propoziie n limba englez.

    O expresie simbolic sau o s-expresie are ntotdeauna o anumit valoare.

    Funcia principal a LISP-ului este s determine valoarea unei s-expresii.De fiecare dat cnd lansm o s-expresie interpretorului LISP (de obicei subforma unei liste, el va evalua acea expresie i ne va da rezultatul. Acestrezultat se numete valoarea expresiei.

    O expresie simbolic sau o s-expresie reprezint pur i simplu oinstruciune n LISP.

    S-expresiile n AutoLISP snt construite prin ncadrarea unei secvenevalide de caractere ntre paranteze. Caracterul parantez stnga sau ( senumete parantez deschis i caracterul parantez dreapta sau ) se numete

    parantez nchis. n mod obinuit aceste caractere snt denumite deschis inchis.

    Parantezele dintr-o s-expresie trebuie s fie echilibrate. Oricrei parantezedeschise trebuie sa-i corespund una nchis.

    Obs. Cea mai frecvent greeal n AutoLISP este nenchidereaparantezelor. Editoarele de text profesionale au aceast caracteristic de agsi parantezele corespondente cu un minim de efort.

    50099176.doc R.2.1 9/21/2011 7

  • 8/2/2019 47398143 Lectii LISP Romana

    8/259

    AUTODESK, INC.

    Cum recunoate AutoCAD-ul o s-expresie

    AutoCAD-ul recunoate o s-expresie AutoLISP printr-o parantez deschis.Dac gsete o astfel de parantez, AutoCAD-ul transfer intrareautilizatorului ctre interpretorul AutoLISP i ateapt rezultatul. AutoCADafieaz rezultatul s-expresiei.

    Command: (+ 1 2)

    3

    Command:

    AutoCAD AutoLISP(+ 1 2)

    3

    Figura 1. Diagrama de comunicatie dintre AutoCAD si AutoLISP

    ExempluPe linia de comand a AutoCAD-ului nscriei s-expresiile n coloana dinstnga a tabelului care urmeaz. Comparai rezultatele date de AutoCAD curezultatele care se afl n coloana din dreapta a tabelului.

    Command:(+12)3Command:

    S-expresii Rezultate(+ 1 2) 3(- 2 1) 1(/ 4 2) 2(* 4 2) 8

    Tabelul 1. Rezultatele expresiilor simbolice

    S-expresiile i comenzile AutoCAD

    S-expresiile pot fi introduse ca intrare la comenzi AutoCAD. AutoCAD-ul

    va recunoate parantezele deschise, va transfera intrarea interpretoruluiAutoLISP i va atepta rezultatul.

    8

  • 8/2/2019 47398143 Lectii LISP Romana

    9/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    AutoCAD-ul tiprete rezultatul intrrii s-expresiilor pe linia de comand.AutoCAD-ul folosete rezultatul unei s-expresii introduse, drept intrare lacomanda curent.

    AutoCAD AutoLISP(/ 360 15)

    24

    Command:array

    polar

    last

    5,5

    (/ 360 15)

    Command:array

    polar

    last

    5,5

    20

    Figura 2. Cum AutoCAD-ul si AutoLISP-ul comunica intr-o comanda AutoCAD

    50099176.doc R.2.1 9/21/2011 9

  • 8/2/2019 47398143 Lectii LISP Romana

    10/259

    AUTODESK, INC.

    Exemplu

    n comanda "polar array" care urmeaz, mprind 360 de grade la 15 sedetermin numrul de obiecte de creat, de exemplu se creaz un obiect lafiecare 15 grade de rotaie.

    Introducei comenzile.

    Command: lineFrom point: 5,5To point: 5,8To point: Enter

    Command: arraySelect objects: last1 foundSelect objects: EnterRectangular or Polar array (R/P): pCenter point of array: 5,5Number of items: (/ 360 15)Angle to fill (+=ccw, -=cw) :EnterRotate objects as they are copied? Enter

    Figura 3. Expresia (/360 15) genereaza un array de 24 linii

    Caracterul semnul exclamrii

    AutoCAD-ul analizeaz intrarea utilizatorului n linia de comand cautndun alt caracter AutoLISP asociat: semnul exclamarii sau !. Acest caractereste denumit n mod frecvent bang. Dac semnul exclamarii este primulcaracter, AutoCAD-ul transfer intrarea ctre interpretorul AutoLISP iateapt rezultatul.

    Orice s-expresie valid poate urma dup semnul exclamrii.

    Command:!(+ 12)

    10

  • 8/2/2019 47398143 Lectii LISP Romana

    11/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Caracterul "bang" este deseori folosit pentru a cere AutoLISP-ului valoareaunui simbol. n acest caz, simbolul nu trebuie s se afle ntre paranteze.

    Command: !pi

    Exemplu

    pi este un simbol predefinit n AutoLISP. Extragei valoarea simbolului pipe linia de comand AutoCAD.

    Command: !pi3.14159Command:

    Recapitulare

    S-expresiile snt expresii AutoLISP valide aflate ntre

    paranteze. AutoCAD-ul caut dou caractere speciale: parantezele

    deschise sau open i semnul exclamrii sau bang.

    Open indic AutoCAD-ului c urmeaz o s-expresie.

    Bang indic AutoCAD-ului c urmeaz o s-expresie sau unsimbol.

    S-expresiile i caracterul bang pot fi folosite n linia decomand sau n cadrul comenzilor AutoCAD.

    Caracterul bang poate precede S-expresiile sau simbolurile.

    50099176.doc R.2.1 9/21/2011 11

  • 8/2/2019 47398143 Lectii LISP Romana

    12/259

    AUTODESK, INC.

    Aceast pagin a fost lsat liber n mod intenionat.

    12

  • 8/2/2019 47398143 Lectii LISP Romana

    13/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Atomi i liste

    Exist dou mari categorii de tipuri de date n AutoLISP: atomi i liste.Atomii snt obiecte simple. Listele snt obiecte complexe. Acest capitoldefinete atomii i listele.

    Obiective

    n acest capitol se va studia:

    Diferena dintre atomi i liste

    Componentele unei liste

    Cum s recunoatem un raport de erori AutoLISP

    Natura obiectului AutoLISP nil

    Atomi

    Un atom este cel mai simplu tip de date din Lisp. Un atom poate fi unnumr ntreg

    1

    un numr real

    4587.993401

    un ir de caractere

    ''A String Of Pearls''

    o funcie AutoLISP predefinit

    +

    un simbol

    XYZ

    sau oricare alt tip de obiecte existente n tabelul 3-1.

    50099176.doc R.2.1 9/21/2011 13

  • 8/2/2019 47398143 Lectii LISP Romana

    14/259

    AUTODESK, INC.

    Tipuri de atomi Exemple Tip de dataAutoLISP

    simbol pi,x,mid_pt SYM

    sir "Hello, world." STR

    intreg 1,32767,-32768 INT

    numar real 1.0,45.678,-876543.21 REAL

    descriptor de fisier FILE

    nume entitate AutoCAD ENAME

    set de selectie AutoCAD PICKSET

    subr (functie interna) SUBR

    subr externa (Functia ADS) EXSUBR

    Tabelul 2. Exemple de atomi din AutoLISP si tipul de date al acestora

    Exist o regul simpl pentru a afla dac un obiect este un atom sau o list.Dac obiectul nu se afl ntre paranteze atunci este un atom; dac da, atuncieste o list.

    Liste

    Listele snt s- expresii complexe formate din atomi i/sau alte liste. Listelenecesit sintaxe simple dar riguroase.

    O list trebuie s se afle ntre paranteze.

    Pentru orice list care poate fi evaluat, primul termen dincadrul listei respective trebuie s fie o funcie.

    Obiectele din cadrul listei trebuie separate prin cel puin unspaiu.

    Iat cteva exemple de liste. Observai c fiecare obiect este separat printr-un spaiu de celelalte obiecte din cadrul listei.

    (+ 1 2 )(- 4 2 )

    (x y z )(1.0 1.0 0.0 )

    Despre evaluarea listelor vom vorbi puin mai trziu.

    Elementele unei liste

    Atomii i listele pot fi combinate sub form de liste. n urmtoarele patruexemple am introdus trei atomi ntr-o list. Fiecare atom este un element allistei.

    Exemplu

    Aceast list are trei elemente: numerele reale 1.0, 1.0 i 0.0

    14

  • 8/2/2019 47398143 Lectii LISP Romana

    15/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    (1.0 1.0 0.0)

    Aceast list are trei elemente: funcia de adunare + (funcie intern), nr.ntreg 1 i nr. ntreg 3.

    (+ 1 3)

    Aceast list are trei elemente: funcia de adunare +, nr. ntreg 1 i list(+ 2 3)

    (+ 1 (+ 2 3 ))

    Figura 4. Lista de trei elemente: doi atomi si o lista

    Exemplu

    Aceast list are trei elemente: funcia de adunare +, lista (+ 1(+ 2 3)) ilista (+ 4 5).

    (+ (+ 1 (+ 2 3)) (+ 4 5))

    Figura 5. Lista de trei elemente: un atom si doua liste.

    Ceea ce este ncadrat ntre paranteze reprezint o list.

    O list se compune dintr-o parantez de deschidere urmat de zero saude mai multe obiecte care pot fi atomi sau liste dup care urmeaz oparantez de nchidere.

    50099176.doc R.2.1 9/21/2011 15

  • 8/2/2019 47398143 Lectii LISP Romana

    16/259

    AUTODESK, INC.

    Condiii de eroare

    Cnd introducei s-expresii n linia de comand AutoCAD, interpretorulAutoLISP v va spune dac ai introdus o expresie neechilibrat. Oexpresie neechilibratare mai multe paranteze deschise dect nchise.

    Iato expresie neechilibrat. i lipsete o parantez nchis.Command: (+ 1 (+ 2 3)1>

    AutoLISP-ul semnalizeaz o expresie neechilibratprintr-un mesaj special.

    n>

    unde n este numrul de paranteze nchise care lipsesc.

    Snt dou modaliti de rezolvare n cazul condiiilor de eroare: completainumrul corect de paranteze nchise sau apsai Ctrl-C pentru a anulaexpresia i a ne rentoarce n linia de comand.

    Not Este de asemenea posibil s vedei acest mesaj cnd un ir esteneechilibrat. Un ir neechilibrat are ghilimele duble la un capt i simple lacellalt.

    Particularitile obiectului nil

    Toate obiectele din AutoLISP snt atomi sau liste. Atomii i listele seexclud mutual. Un atom nu este niciodat list i o list nu este niciodatatom.

    Excepia o face obiectul nil.

    Obiectul nil este "lista goal". Prin convenie nil este i atom i list. nilpoate fi exprimat n dou moduri: 0 sau nil;.

    nil este echivalentul AutoLISP pentru fals. Multe funcii n AutoLISPtesteaz dac o condiie este adevarat sau fals, de exemplu dac valoareaunui numr este mai mare dect 0. De cte ori un test de condiie este fals,AutoLISP-ul va returna obiectul nil ca fiind valoarea testului.

    nil este singurul obiect din AutoLISP corespunzator lui "fals"; de aceeaorice alt valoare returnat de un test de condiie trebuie s corespund lui"adevrat".

    16

  • 8/2/2019 47398143 Lectii LISP Romana

    17/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Recapitulare Cele dou mari clase de obiecte din AutoLISP snt atomii i

    listele.

    Exist cteva tipuri diferite de atomi.

    Atomii snt obiecte care nu snt ncadrate ntre paranteze.

    Listele snt ntodeauna ncadrate ntre paranteze

    Obiectele coninute ntr-o list constituie elementele uneiliste

    Elementele unei liste pot fi atomi sau liste

    Elementele unei liste snt separate ntre ele de cel puin unspaiu

    AutoLISP detecteaz expresiile neechilibrate

    nil este i atom i list nil este lista goal

    nil este returnat de testele de condiie pentru a indica "fals"

    50099176.doc R.2.1 9/21/2011 17

  • 8/2/2019 47398143 Lectii LISP Romana

    18/259

    AUTODESK, INC.

    EXERCITIUL 1: ATOMISILISTE

    n acest exerciiu vei:

    Recapitula ce ai neles despre atomi i liste

    Determina dac un obiect este atom sau list Folosi AutoLISP pentru a afla valoarea diferitelor obiecte

    Partea I1. Determinai dac obiectul este atom sau list.

    2. Completai rezultatul evalurii n csua corespunzatoare.

    Tabelul 3. Determinarea naturii obiectului

    18

    Obiecte Atomi Liste

    73.5

    "0,0"

    (1.0 2.0 3.0)

    "String"

    ("String")

    ()

  • 8/2/2019 47398143 Lectii LISP Romana

    19/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Partea a II-a1. Gsii valoarea acestui atom n linia de comand AutoCAD

    2. Tiprii "!" urmat de un atom

    3. Scriei rspunsul n coloana din dreapta:Exemplu

    Command: !4.5

    Tabelul 4. Determinarea valorii atomului

    Partea a III-a1. Determinai numrul de elemente coninut de fiecare list.

    2. Scriei rspunsul n coloana din dreapta.Lista Numar de elemente

    (1.0 2.0 3.0)

    (+ 1 2)

    (+ 1 (+ 2 3))

    (+ 1 2 (+ 3 4) 5)

    (+ 1 (+ 2 (+ 3 4)) 5)

    ()

    Tabelul 5. Determinarea numarului de elemente din lista

    50099176.doc R.2.1 9/21/2011 19

    Atomi Valori

    4.5

    "text"

    17

    setq

    xyz

    nil

  • 8/2/2019 47398143 Lectii LISP Romana

    20/259

    AUTODESK, INC.

    Aceast pagin este lsat liber n mod intenionat.

    20

  • 8/2/2019 47398143 Lectii LISP Romana

    21/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Evaluarea

    Evaluarea este procesul prin care AutoLISP-ul determin valoarea unuiobiect. Evaluarea se aplic i la atomi i la liste.

    Fiecare obiect din AutoLISP are o valoare. Prin evaluarea unui obiect,AutoLISP-ul determin valoarea acestuia.

    Obiective

    n acest capitol vei studia:

    Procesul evalurii

    Cum returneaz AutoLISP-ul o valoare

    Cum evalueaz AutoLISP-ul atomi i liste

    Cum se folosesc funciile aritmetice de baz n AutoLISP Cum se anuleaz evaluarea unui obiect

    Cum leag AutoLISP-ul o valoare de o variabil

    Returnarea valorii

    Cnd transmitei un obiect spre evaluare AutoLISP-ului, acesta i determinvaloarea i o returneaz. ntr-un exemplu anterior, folosind caracterul "!",AutoLISP-ul a evaluat obiectul pi i a returnat valoarea AutoCAD-ului.AutoCAD-ul a tiprit valoarea returnat n zona liniei de comand.

    Command: !pi3.14159

  • 8/2/2019 47398143 Lectii LISP Romana

    22/259

    AUTODESK, INC.

    Figura 6. AutoLISP returneaza valoarea expresiei in linia de comanda AutoCAD.

    Evaluarea atomilor

    Atomii snt obiecte simple i snt evaluai folosind reguli simple potrivittipului lor de date. Majoritatea atomilor se autoevalueaz. Numerele ntregi,

    numerele reale, irurile, se autoevalueaz la valoarea pe care o au. Modul ncare se evalueaz un simbol nu poate fi discutat dect dup ce nvam cumse leag o list.

    Tip de atom Exemplu Regula deevaluare

    Valoare

    Intreg 1 Valoarea estenr. insusi

    1

    Real 4.5 Valoarea estenr. insusi

    4.5

    Sir "text" Valoarea estenr. insusi "text"

    Simbol x Legarea curenta Ultima asignare

    Tabelul 6. Reguli de evaluare a atomilor

    Evaluarea listelor

    Evaluarea unei liste poate fi facut ntr-unul din aceste dou moduri: se ialista ca atare sau se evalueaz. n funcie de natura listei, metodele daurezultate diferite,de exemplu, valori diferite.

    22

  • 8/2/2019 47398143 Lectii LISP Romana

    23/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Dac o list este luat ca atare, atunci valoarea ei este lista nsi. Acestlucru va fi mai clar dup explicarea funciei quote mai trziu n aceastlecie.

    Dac o list urmeaz a fi evaluat de AutoLISP, atunci trebuie respectat

    regula sintactic. Pentru orice list care poate fi evaluat, primul element din

    cadrul listei trebuie s fie o funcie.

    Listele snt evaluate potrivit instruciunilor referitoare la primul element allistei. Dac primul element este numele unei subrutine interne AutoLISPsau funcii, restul de elemente ale listei snt transferate funciei caargumente formale i snt evaluate de ctre funcie.

    Funciile snt fie funcii interne AutoLISP, fie subrutine, aa cum snt celeprezentate n capitolul 4 al manualului AutoLISP Programmers Reference

    Manual, fie funcii externe definite de utilizator sau exsubr definite deaplicaii ADS, sau funcii AutoLISP definite de utilizator.

    Cum evalueaz AutoLISP-ul o list

    Vom folosi o list simpl pentru a ilustra procesul de evaluare a unei liste.

    Aceasta este o list format din trei elemente: funcia + numerele ntregi 1i 2.

    (+ 1 2)

    Etapa I: Analiza primului element

    Primul element al unei liste pe care AutoLISP-ul o poate evalua trebuies fie o funcie.

    AutoLISP-ul verific primul element al listei unde se ateapt s gseasc ofuncie. Dac primul element al listei pe care AutoLISP-ul ncearc s oevalueze nu este o funcie, acesta va da natere unei erori.

    Elementele care urmeaz dup o funcie n cadrul unei liste sntargumentele funciei; adic ele reprezint datele asupra crora funciaopereaz.

    Etapa a II-a: Evaluarea funciei

    AutoLISP evalueaz funcia. O funcie evalueaz un set de instruciuni caresugereaz AutoCAD-ului cum s acioneze mai departe.

    Funcia + evalueaz un set de instruciuni pentru AutoLISP. Dac ar fi sexprimm n cuvinte aceste instruciuni, am putea spune: gsii valoarea

    fiecrui element din aceast list. Care snt argumentele funciei? Puneitoate valorile la un loc i returnai rezultatul ca fiind valoarea ntregii liste.

    50099176.doc R.2.1 9/21/2011 23

  • 8/2/2019 47398143 Lectii LISP Romana

    24/259

    AUTODESK, INC.

    Etapa a III-a: Continuarea instruciunilor funciei

    (.. 1 ..)

    Urmrind instruciunile din funcia +, AutoLISP-ul gsete valoarea

    urmtorului element din list: numrul ntreg 1. Numerele ntregi seevalueaz pe sine. Astfel AutoLISP-ul memoreaz valoarea 1 n stivaprogramului, de exemplu o introduce ntr-o locaie de memorie temporar.

    (.. .. 2)

    Coninnd cu instruciunile de la funcia +, AutoLISP-ul verific dac maisnt i alte elemente n list. Mai exist un element: numrul ntreg 2.AutoLISP-ul i pastreaz valoarea n stiv.

    Etapa a IV-a: Returnarea valorii funciei

    Nemaigsind alte elemente n list, de exemplu argumente la funcie,AutoLISP-ul i termin instruciunile de la funcia + prin adugareavalorilor argumentelor 1 i 2 i prin returnarea numrului ntreg 3 ca fiindvaloarea listei.

    Command: (+ 1 2)3Command:

    Un exemplu mai complex

    AutoLISP evalueaz elementele dintr-o listde la stnga la dreapta.

    n multe cazuri ar fi convenabil pentru noi s urmm procesul de evaluaredin interior spre exterior dect de la dreapta spre stnga. Rezultatele snt deobicei aceleai i adesea este mai uor pentru noi s citim coduri AutoLISPcu un grad de imbricare mai mare, lucrnd din interior n exterior. Dar nuacesta este modul n care AutoLISP-ul evalueaz o list. ntotdeaunalucreaz de la stnga la dreapta.

    Considerai aceast list format din trei elemente: (+ 1 (+ 2 3))

    Funcia +

    Atomul 1 Lista (+ 2 3)

    24

  • 8/2/2019 47398143 Lectii LISP Romana

    25/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Figura 7. Evaluarea unei liste complexe

    AutoLISP-ul evalueaz aceast list folosind exact aceeai metod ca nexemplul anterior.

    (+ ..

    AutoLISP-ul caut primul element al listei ateptnd s gseasc o funcie iapoi o evalueaz. Funcia returneaz valoarea ei ca un set de instruciuni

    pentru AutoLISP.

    (.. 1 ..

    Urmnd instruciunile funciei +, AutoLISP-ul afl valoarea celui de al

    doilea element al listei, de ex. primul argument la funcia +: atomul 1. Apoii memoreaz valoarea i continu.

    (.. .. (+ 2 3) ..

    AutoLISP-ul gsete valoarea celui de al treilea element al listei, cum ar fial doilea argument la funcia +.

    Al treilea element este el nsui o list. Cum afl AutoLISP-ul valoareaunei liste? Prin evaluare. Cum evalueaz AutoLISP-ul o list?

    (.. .. (+ ..

    Mai nti evalueaz funcia + i i primete instruciunile

    ( .. .. (.. 2 ..

    (.. .. (.. .. 3) ..

    Apoi gsete valoarea argumentelor2 i 3. Terminndu-i instruciunile de lafuncia + din cadrul listei (+ 2 3), AutoLISP-ul adaug valorile i returneazrezultatul care n acest caz este nr. ntreg 5.

    Nemaigsind alte elemente n list, AutoLISP-ul termin instruciunile de

    la funcia + n lista principal prin adugarea valorii celor dou elemente laun loc i returnnd valoarea 6.

    50099176.doc R.2.1 9/21/2011 25

  • 8/2/2019 47398143 Lectii LISP Romana

    26/259

    AUTODESK, INC.

    Funcii aritmetice

    AutoLISP-ul include funcii interne pentru operaii aritmetice ca: adunarea,scderea, nmulirea i mprirea

    + funcia de adunare

    - funcia de scdere * funcia de nmulire

    / funcia de mprire

    26

  • 8/2/2019 47398143 Lectii LISP Romana

    27/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Exemple

    Expresii aritmetice S-expresii AutoLISP

    1 + 2 (+ 1 2)

    2 - 1 (- 2 1)

    2 * 4 (* 2 4)

    4 / 2 (/ 4 2)

    Tabelul 7. Aritmetica AutoLISP

    Ordinea argumentelor n funciile de adunare i de nmulire nu areimportan. Este ns important pentru scdere i mprire.

    Fig. 8 Ordinea argumentelor in functia de scadere

    n cazul scderii, valoarea celui de al doilea argument este sczut dinvaloarea primului argument i rezultatul returnat este valoarea listei.

    Fig. 9 Ordinea argumentelor in functia de impartire

    n cazul mpririi, valoarea celui de al doilea argument este divizorulvalorii primului argument.

    Iat cteva exemple complexe.

    50099176.doc R.2.1 9/21/2011 27

  • 8/2/2019 47398143 Lectii LISP Romana

    28/259

    AUTODESK, INC.

    Exemple

    Expresii aritmetice S-expresii AutoLISP

    1 + (2 - 3) (+ 1 (- 2 3))

    (4 + 2) - 1 (- (+ 4 2) 1)

    4 * 4 / 2 (/ (* 4 4) 2)

    4 / 2 * 3 (* 3 (/ 4 2))

    Tabelul 8. Exemple complexe de expresii aritmetice

    Recapitulare AutoLISP-ul determin valoarea unui obiect prin evaluare.

    AutoLISP-ul returneaz valoarea fiecrui obiect pe care ilevalueaz.

    Majoritatea atomilor se evalueaz pe sine.

    Simbolurile se evalueaz prin legare sau atribuire.

    Listele snt evaluate printr-un proces standard.

    Primul element al oricarei liste ce poate fi evaluat trebuies fie o funcie.

    AutoLISP-ul are funcii standard pentru operaii aritmetice.

    28

  • 8/2/2019 47398143 Lectii LISP Romana

    29/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 2: LISTESIARITMETICALISTELOR

    n acest exerciiu vei:

    Consolida cunotinele despre procesul de evaluare

    ncepe scrierea expresiilor AutoLISP folosind listele

    Transforma expresiile aritmetice n expresii AutoLISP

    Transforma expresiile AutoLISP n expresii aritmetice

    Partea I1. Folosii funcia +, -, /, i *.

    2. Transformai expresiile aritmetice n expresii AutoLISP.

    3. Scriei rspunsurile n coloana din dreapta.

    ExempluExpresia n notaia aritmetic standard:

    1 + 2

    Expresia n AutoLISP:

    ( + 1 2 )

    Expresii aritmetice S-expresii

    3 + 10 + 5

    20 * 15

    16 - 10

    15 / 3

    5 + (10 * 2)

    (5 + 10) * 2

    Tabelul 9. Traducerea expresiilor aritmetice

    50099176.doc R.2.1 9/21/2011 29

  • 8/2/2019 47398143 Lectii LISP Romana

    30/259

    AUTODESK, INC.

    Partea a II-a1. Transformai s-expresiile n expresii aritmetice

    2. Scriei rspunsurile n coloana din dreapta

    Exemplu

    Expresia n notaia aritmetic standard

    (2 * 5) / (7 - 2)

    Expresia n AutoLISP

    (/ (* 2 5) (- 7 2))

    Tabelul 10. Traducerea expresiilor AutoLISP

    30

    s-expresii expresii aritmerice

    (+ 2 (+ 5 4) (- 4 2))

    (- 5 (+ 4 (- 3 2)))

    (/ 8 (- (/ 6 2) 1))

    (* 2 (/ (+ 2 4) 3))

    (- 5 (/ 6 (+ 1 2)))

    (+ (/ (* 2 3) (- 4 2)) 1)

  • 8/2/2019 47398143 Lectii LISP Romana

    31/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Liste neevaluate

    Valoarea unei liste poate fi determinat n unul din aceste dou moduri: seevalueaz lista sau se consider lista ca atare.

    Funcia AutoLISP quote este folosit pentru a returna o list sau un atomneevaluat, adic la valoarea ca list.

    Folosii quote ca fiind primul element ntr-o list i adugai un singurargument. Valoarea listei va fi valoarea neevaluat a celui de al doileaelement al listei, adic argumentul la quote.

    Exemplu

    Aceast expresie returneaz lista (1.0 2.0 3.0) neevaluat.

    Command: (quote (1.0 2.0 3.0))

    (1.0 2.0 3.0)Ce s-ar ntmpla dac AutoLISP-ului i s-ar cere s evalueze lista?

    De ce?

    Command: (1.0 2.0 3.0)?

    Operaia de legare a dou obiecte

    Legarea este procesul prin care o valoare este atribuit unui simbol definitde utilizator sau unei variabile. n AutoLISP, spunem c la un simbol sau lao variabil se leag o valoare. Aceasta nseamn n limbajul BASIC c ovaloare este egal de o variabil sau c o valoare este atribuit uneivariabile.

    Funcia AutoLISP setq se folosete pentru a lega un simbol sau o variabilde o valoare.

    Exemplu

    Aceast expresie leag simbolul x de valoarea 4.5.

    Command: (setq x 4.5)

    4.5Command: !x4.5

    50099176.doc R.2.1 9/21/2011 31

  • 8/2/2019 47398143 Lectii LISP Romana

    32/259

    AUTODESK, INC.

    n BASIC, aceeai operaie ar putea fi exprimat astfel:

    LET x = 4.5

    Cum funcioneaz funcia setqValoarea funciei setq este un set de instruciuni pentru AutoLISP.

    Aceste instruciuni ar putea fi exprimate astfel: Luai primul argument caatare. Nu-l evaluai. Gsii valoarea celui de al doilea argument. Legai

    primul argument de valoarea celui de al doilea argument. Returnaivaloarea legrii ca fiind valoarea listei.

    Exemplu

    Notai returnarea valorii acestei expresii. Valoarea listei este valoarealegturii stabilite pentru simbolul x de ctre funcia setq.

    Command: (setq x 4.5)4.5

    Recapitulare Funcia quote suprim procesul de evaluare.

    Legarea este procesul de atribuire a unei valori la ovariabil.

    Functia setq este folosit pentru a lega o variabil de ovaloare.

    32

  • 8/2/2019 47398143 Lectii LISP Romana

    33/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 3: EVALUAREALISTELORSILEGAREAVARIABILELOR

    n acest exerciiu vei:

    Consolida cunotinele despre procesul de evaluare

    Determina dac o list poate fi evaluat fr erori

    Consolida cunotinele despre procesul de legare

    Folosi funcia setq pentru a lega variabile de valori, adicvei atribui valori variabilelor

    Partea I1. Determinai dac o list poate fi evaluat sau trebuie considerat

    ca atare.

    2. Punei un semn n coloana corespunztoare

    Tabelul 11. Determinarea situatiei in care o lista poate fi evaluata

    50099176.doc R.2.1 9/21/2011 33

    s-expresii Evaluari? Numai fatavalorii?

    (+ 1 2)

    (+ 1 (+ 2 3))

    (1.0 2.0 3.0)

    (quote (1.0 2.03.0))

    (setq x 4.5)

    (setq y (1.0 2.03.0))

    (y (1 2))

  • 8/2/2019 47398143 Lectii LISP Romana

    34/259

    AUTODESK, INC.

    Partea a II-a

    1. Legai variabila x de valorile din tabel

    2. Folosii funcia setq i funcia quote dac este necesar

    3. Verificai valoarea variabilei folosind "bang" pentru a-i aflalegarea curent.

    Exemplu

    Command: (setq x 1)1Command: !x1

    Command:(setq x (+ 1 2 3))6Command: !x6

    Command: (setq x (quote (4 (+ 5 6)))(4 (+ 5 6))Command:!x(4 (+ 5 6))

    Valoare pentrux

    14.5

    "text"

    (1.0 2.0 3.0)

    (+ 1 2 3)

    (1 (+ 2 3))

    Tabelul 12. Legarea lui x unor valori diferite

    34

  • 8/2/2019 47398143 Lectii LISP Romana

    35/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Aceast pagin este lsat liber n mod intenionat.

    50099176.doc R.2.1 9/21/2011 35

  • 8/2/2019 47398143 Lectii LISP Romana

    36/259

    AUTODESK, INC.

    S-expresii AutoLISP n cadrul comenzilor AutoCAD

    S-expresiile AutoLISP pot fi folosite n cadrul comenzilor AutoCAD.

    Obiectiven acest capitol vei studia:

    Cum s folosii AutoLISP-ul n cadrul comenzilor AutoCAD

    Cum s returnai o valoare din AutoLISP ctre o comandAutoCAD

    Returnarea unei valori n linia de comand

    Valoarea unei expresii AutoLISP este trecut din AutoLISP n AutoCADca rspuns la linia AutoCAD n aciune.

    Dac linia de comand este n aciune, valoarea unei expresii este pur isimplu tiparit n zona liniei de comand.

    Command: (setq x (+ 4 6))10Command: !x10

    Aceast expresie returneaz valoarea divizrii rdcinii ptrate numrului50 prin numrul real 9.

    Command: (/ (sqrt 50.0) 9.0)0.78567

    Aceast expresie returneaz valoarea multiplicrii rezultatului obinut prinadunarea lui 2.5 cu 6.3 de 24.0.

    Command: (* (+ 2.5 6.3) 24.0)211.2

    Returnarea unei valori la o comand AutoCAD

    Dac o comand AutoCAD este n aciune, atunci evaluarea unei expresiiAutoLISP returneaz valoarea expresiei n AutoCAD. Valoarea devinerspunsul la linia curent a comenzii AutoCAD.

    n acest exemplu, comanda ARRAY recepioneaz ca numr de repetiii alefunciei, rezultatul unei expresii AutoLISP pentru care 6.0 se divide la 0.35;cu alte cuvinte, nu tim dinainte cte repetiii cuprinde unitatea 0.35 la odistant de 6.0 unitai, deci rugm AutoLISP-ul s calculeze valoarea

    pentru noi i s returneze rspunsul AutoCAD-ului.Deoarece comanda dinARRAY accept numai numere ntregi i nu numere reale, vom folosifuncia AutoLISP fix pentru a rotunji cel mai apropiat numr ntreg.

    36

  • 8/2/2019 47398143 Lectii LISP Romana

    37/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Exemplu

    ncepei un desen nou.

    Tiprii comenzile i expresiile care urmeaz.

    Command: (/ 6.0 0.35)17.1429Command: (fix 17.1429)17Command: (fix (/ 6.0 0.35))17

    Command: lineFrom point: 1,1To point: 5,5To point: Enter

    Command: arraySelect objects: ISelect objects: EnterRectangular or Polar array (R/P): rNumber of rows (-) : 1Number of columns (III) : (fix (/ 6.0 0.35))Distance between columns: 0.35

    AutoCAD creaz 17 elemente n array.

    Trebuie avut n vedere faptul c o expresie AutoLISP a fost folositinteractiv, n mijlocul unei comenzi AutoCAD, pentru a calcula o valoare(n acest caz un numr ntreg) care ulterior este dat automat comenzii n

    acel punct special la secvena de cerere a comenzii.

    50099176.doc R.2.1 9/21/2011 37

  • 8/2/2019 47398143 Lectii LISP Romana

    38/259

    AUTODESK, INC.

    n exemplul urmator, AutoLISP-ul calculeaz mrimea razei unei racordri.

    Exemplu

    ncepei un desen nou.

    Tiprii expresiile i comenzile care urmeaz.

    Mrimea razei unei racordri este stabilit la 2.24.

    Command: lineFrom point: 1,1To point: 5,5To point: Enter

    Command: lineFrom point: 10,1To point: 6,5To point: Enter

    Command: filletPolyline/Radius/: rEnter fillet radius : (/ 28.0 12.5)

    Command: filletPolyline/Radius/: pick first lineSelect second object: pick second line

    Figura 10. Doua linii cu o racordare la o raza de (/28.0 12.5) sau 2.24

    Recapitulare S-expresiile pot fi folosite ca rspunsuri la cererile de

    comand AutoCAD.

    AutoLISP returneaz valoarea unei s-expresii folosite ncadrul unei comenzi AutoCAD la cererea comenzii.

    38

  • 8/2/2019 47398143 Lectii LISP Romana

    39/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 4: EXPRESIIAUTOLISPINCADRULCOMENZILORAUTOCAD

    n acest exerciiu vei:

    Folosi funcii aritmetice i funcia setq pentru a crea valori i

    legturi simbol Folosi valorile i simbolurile ca rspunsuri la cererile de

    comand AutoCAD

    Instruciuni1. ncepei un desen nou.

    2. Desenai un arc cu un unghi inclus de 1 radian.

    3. Desenai dou cercuri concentrice: unul cu o raz de dou treimipii unul cu o raz la jumtate din aceast valoare.

    4. Amplasai arcul n jurul centrului cercurilor.5. Fixai cte o copie la fiecare 15 grade de rotaie.

    Command: arcCenter/: 5,5Center/End/: cCenter: 3,5Angle/Length of chord/: aIncluded angle: (/ 180 pi)Command: (setq x (* pi (/ 2.0 3.0)))2.0944

    Command: circle

    3P/2P/TTR/: 5,5Diameter/: !x

    Command: circle3P/2P/TTR/: 5,5Diameter/: (/ x 2)

    50099176.doc R.2.1 9/21/2011 39

  • 8/2/2019 47398143 Lectii LISP Romana

    40/259

    AUTODESK, INC.

    Command: (setq x (/ 360 15))24

    Command: arraySelect objects: pick the arc1 found

    Select objects: EnterRectangular or Polar array (R/P): pCenter point of array: 5,5Number of items: !xAngle to fill (+=ccw, -=cw) :EnterRotate objects as they are copied? Enter

    Figura 11. Array completat

    40

  • 8/2/2019 47398143 Lectii LISP Romana

    41/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Aceast pagin este lsat liber n mod intenionat.

    50099176.doc R.2.1 9/21/2011 41

  • 8/2/2019 47398143 Lectii LISP Romana

    42/259

    AUTODESK, INC.

    Tipuri de date numerice

    AutoLISP-ul are dou tipuri de date numerice: numere ntregi i numerereale. Funcia type returneaz tipurile de date ale unui obiect.

    Obiectiven acest capitol vei studia:

    Diferenele dintre cele dou tipuri de date numerice

    Cum s determinai tipul de date al unui obiect

    Determinarea tipului de date ale unui obiect

    Funcia AutoLISP type se folosete pentru a determina tipul de date al unuiobiect. type cere un argument i returneaz un simbol care indic tipul dedate al argumentului.

    De exemplu, aceast expresie returneaz tipul de date al numrului real 1.0

    Command: (type 1.0)REAL

    Numere reale

    AutoLISP-ul reprezint numerele reale n virgul mobil, dubl precizie cucel puin 14 zecimale. Nu exist tipuri de date care s reprezinte numerecu simpl precizie n AutoLISP. Toate numerele reale snt cu dubl preciziei ele snt reprezentate n AutoLISP n aceeai manier ca n AutoCAD.

    Numerele reale snt numere introduse cu punct zecimal, de exemplu 4.5 sau123.456.

    Command: (setq x 4.5)4.5

    Pentru valori cuprinse ntre 1.0 i -1.0 , zero trebuie s precead punctulzecimal, de exemplu, 0.45 sau 0.123 sau -0.876.

    Command: (setq x 0.123)0.123

    Precizia afirii si precizia intern

    Precizia implicit a afirii unui numr real n AutoLISP este de 5zecimale. Reprezentarea intern este ntotdeauna meninut cu cel puin 14zecimale semnificative de precizie.

    42

  • 8/2/2019 47398143 Lectii LISP Romana

    43/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Dac este necesar afiarea sau tiprirea valorii unui numr real cu oprecizie mai mare dect precizia de afiare a AutoLISP-ului, numrul realpoate fi transformat ntr-un ir cu ajutorul funciei AutoLISP rtos i apoiafiat sau tiprit cu precizia de afiare dorit.

    rtos cere pn la 3 argumente: un numr real, un numr ntreg carereprezint unul dintre sistemele de unitai AutoCAD i numrul de zecimale

    pentru irul care va fi returnat.

    Exemplu

    Introducei expresiile care urmeaz.

    Legai simbolul x de numrul real 4.5

    Command: (setq x 4.5)4.5

    Verificai-i valoarea i tipul de dateCommand: !x4.5Command: (type x)

    Folosii funcia rtos pentru a vizualiza valoarea lui x ca numr zecimal cu oprecizie de 8 zecimale.

    Command: (rtos x 2 8)"4.50000000"

    Numere ntregi

    Numerele ntregi snt numere introduse fr punct zecimal. Numerelentregi n AutoLISP snt numere ntregi cu semn pe 32 bii cuprinse ntre2.147.483.648 i +2.147.483.647. Dei AutoLISP-ul folosete valori de 32

    bii, cele transferate ntre AutoLISP i AutoCAD snt limitate la valori de16 bii, de exemplu nu se poate transfera o valoare mai mic de -32.768 saumai mare de +32.767 n AutoCAD. Dac folosii o valoare care depesteaceste limite, putei folosi funcia float pentru a o transforma ntr-un numrreal nainte de a o transfera n AutoCAD.

    50099176.doc R.2.1 9/21/2011 43

  • 8/2/2019 47398143 Lectii LISP Romana

    44/259

    AUTODESK, INC.

    Exemplu

    Introducei expresiile care urmeaz.

    Legai simbolul x de un numr ntreg cu valoarea de 65535.

    Command: (setq x 64435)65535

    Verificai-i valoarea i tipul de date.

    Command: !x65535Command: (float x)65535.0Command: (fix (float x))65535Command: (type x)INT

    Folosii funciile float i fix pentru a returna valoarea lui x cu tipuri de datediferite i folosii funcia rtos pentru a imprima valoarea cu un format dezece zecimale.

    Command: (type (float x))REALCommand: (type (fix (float x)))INTCommand: (rtos (float x) 2 10)"65535.0000000000"

    Conversia automat a numerelor ntregiAutoLISP-ul va converti numerele ntregi n numere reale ori de cte ori vantlni ambele tipuri de date ca argumente la funcie.

    Dac dou numere ntregi snt folosite ca argumente la funcia de adunare+, valoarea returnat a expresiei este un numr ntreg; totui, dacargumentele snt un numr real i un numr ntreg, valoarea returnat esteexprimat printr-un numr real.

    Exemplu

    Aceast expresie returneaz un numr ntreg.

    44

  • 8/2/2019 47398143 Lectii LISP Romana

    45/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Command: (+ 1 2)3Command: (type (+ 1 2))INT

    Aceast expresie returneaz un numr real.

    Command: (+ 1.0 2)3.0Command: (type (+ 1.0 2)REAL

    Recapitulare

    AutoLISP-ul are dou tipuri de date numerice: numerentregi i numere reale.

    Numerele ntregi au valori de 32 bii n AutoLISP.

    Numai numerele ntregi cu valori de 16 bii pot fi transferatentre AutoLISP i AutoCAD.

    Numerele reale snt numere zecimale cu dubl precizie.

    Numerele reale snt reinute cu cel puin 14 zecimale deprecizie.

    AutoLISP-ul va converti un numr ntreg ntr-un numr realcnd le ntlnete pe amndou n cadrul aceleiai expresii.

    Un numr real trebuie ntotdeauna s aib o cifr careprecede punctul zecimal.

    Funcia type returneaz tipul de date al unui obiect. Funcia fix transform un numr real ntr-un numr ntreg.

    Funcia float transform un numr ntreg ntr-un numr real.

    50099176.doc R.2.1 9/21/2011 45

  • 8/2/2019 47398143 Lectii LISP Romana

    46/259

    AUTODESK, INC.

    EXERCITIUL 5: FOLOSIREANUMERELORINTREGISIREALE

    n acest exerciiu vei:

    Consolida cunotinele despre tipurile de date ale numerelor

    ntregi i reale. Folosi funcia setq pentru a lega variabile de valori cu tipuri

    de date numerice diferite.

    Determina valoarea returnat i tipul de date numerice aleunei expresii AutoLISP

    Partea I1.Legai simbolurile de valori diferite.

    2.Introducei s-expresia corespunzatoare n linia de comand AutoCAD.

    simbol valoare

    a 1

    b 2

    c 3

    x 1.0

    y 2.0

    z 4.5

    Tabelul 13. Legarea variabilelor de valori numerice.

    46

  • 8/2/2019 47398143 Lectii LISP Romana

    47/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Partea aII-a1.Determinai valoarea returnat i tipul de date pentru fiecare expresie.

    2.Scriei rspunsurile n coloanele corespunzatoare

    3.Trebuie mai nti s efectuai prima parte a acestui exerciiu.

    expresia-s returnarea valorii tip de data pentruvaloarea returnata

    (+ 1 2)

    (+ 1 2.0)

    (+ 1.0 2.0)

    (+ a b)

    (+ a y)

    (+ y z)

    (fix x)

    (float a)

    (fix z)

    (float (fix z))

    (fix (+ (float a) (float b)))

    (/ x y)

    (fix (/ x y))

    (float (fix (/ x y)))

    (+ (fix (/ a y)) (fix (float a)))

    Tabelul 14. Valorile returnate si tipurile de date numerice ale expresiilor.

    50099176.doc R.2.1 9/21/2011 47

  • 8/2/2019 47398143 Lectii LISP Romana

    48/259

    AUTODESK, INC.

    Puncte AutoCAD i liste AutoLISP

    AutoCAD-ul folosete coordonatele carteziene pentru a descrie punctele2- i 3-dimensionale. AutoLISP-ul reprezint un punct sub forma unei listede numere reale.

    Obiective

    n acest capitol vei studia:

    Cum reprezint AutoLISP-ul puncte

    Cum s construii o list care reprezint un punct folosindatt constante ct i variabile.

    Puncte AutoCAD

    Un punct 3-dimensional este format din trei numere, fiecare avnd o valoare

    independent care corespunde unei distane de la originea sistemului decoordonate de-a lungul axelor X, Y i Z. Imaginai-v punctul 3-D subforma a trei cutii, fiecare coninnd un numr real.

    Figura 12. Punct 3-d reprezentat prin trei coordonate

    Luai, de exemplu, punctul 3-D 1,2,3. AutoCAD-ul are o gam larg deoperatori pentru a descrie acest punct: Introducerea n coordonate absolute,relative i polare, agarea de obiecte, filtre de coordonate etc. Darreprezentarea intern a punctului se reduce la o asociere ntre trei numerereale.

    Figura 13. Valori de-a lungul axelor de coordonate.

    48

  • 8/2/2019 47398143 Lectii LISP Romana

    49/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    AutoLISP-ul reprezint un punct AutoCAD 3-D sub forma unei listeformate din trei numere reale, unde primul element este valoareacoordonatei X, al doilea valoarea Y i al treilea valoarea Z.

    Punctul 1,2,3 exprimat sub forma unui obiect AutoLISP este (1.0 2.0 3.0)

    Figura 14. Lsta AutoLISP sub forma unui punct AutoCAD

    Construirea listelor de coordonate ale punctelorRezultatul unei ncercri de a crea un obiect AutoLISP, recunoscut deAutoCAD ca punct 3-D, este clar: o list format din trei numere reale.Cum se poate construi o astfel de list?

    Exist dou funcii pentru construirea acestor obiecte: quote i list.

    Construirea punctelor cu funcia quote

    Aa cum ai observat mai devreme, funcia quote impiedic procesul deevaluare pentru singurul ei argument i returneaz acest argument

    neevaluat.Construirea unei liste format din trei numere reale este un proces simplucu ajutorul funciei quote. De exemplu, expresia (quote (1.0 2.0 3.0)returneaz valoarea (1.0 2.0 3.0), o reprezentare AutoLISP valid a unui

    punct AutoCAD.

    50099176.doc R.2.1 9/21/2011 49

  • 8/2/2019 47398143 Lectii LISP Romana

    50/259

    AUTODESK, INC.

    Exemplu

    Introducei expresiile care urmeaz. Creai dou liste formate din cte treinumere reale i folosii listele n linia de comand AutoCAD.

    Command: (setq pt1 (quote (1.0 1.0 1.0)))

    (1.0 1.0 0.0)Command: !pt1(1.0 1.0 0.0)Command: (setq pt2 (quote (5.0 5.0 0.0)))(5.0 5.0 0.0)Command: !pt2(5.0 5.0 0.0)Command: lineFrom point: !pt1To point: !pt2To point: Enter

    pt1 (1.0 1.0 0.0)

    pt2 (5.0 5.0 0.0)

    Figura 15. Linie de la pt1 la pt2

    Construirea punctelor cu funcia list

    Valoarea returnat a funciei list este o list format din valorileargumentelor funciei. Funcia poate primi oricte argumente dorii.

    list evalueaz fiecare argument, unul dup altul i le memoreaz valoareatemporar. Cnd funcia list i epuizeaz argumentele i compune valorileargumentelor din elemente n cadrul unei liste i returneaz lista.

    50

  • 8/2/2019 47398143 Lectii LISP Romana

    51/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Exemplu

    Introducei expresiile care urmeaz.

    n timp ce lucrai, nu uitai c numerele reale se evalueaz pe sine, de

    exemplu, Command: !4.5 returneaz 4.5.Folosii funcia list pentru a returna o list format din trei numere reale.

    Command: (list 1.0 2.0 3.0)(1.0 2.0 3.0)

    Folosii funcia setq pentru a lega simbolul pt la o list cu trei numere reale.

    Command: (setq pt (list 1.0 2.0 3.0))(1.0 2.0 3.0)Command: !pt(1.0 2.0 3.0)

    Folosii simbolul pt ca intrare la comanda AutoCAD ID i verificai dacAutoCAD-ul recunoate valoarea simbolului ca punct valid 3-D.

    Command: idPoint: !ptX=1.0000 Y=2.0000 Z=3.0000Command:

    Figura 16. Valoare returnata de functia list

    50099176.doc R.2.1 9/21/2011 51

  • 8/2/2019 47398143 Lectii LISP Romana

    52/259

    AUTODESK, INC.

    Construirea punctelor din variabile cu funcia list

    Deoarece funcia list i evalueaz argumentele, putei folosi simboluri sauvariabile ca argumente ale funciei list pe/sau n loc de numere reale.

    S admitem c avei trei variabile x, y i z care snt legate de numerele reale1.0, 2.0 i 3.0.

    Figura 17.Legarea variabilelor de numere reale cu functia setq

    Atunci expresia (list x y z) va returna aceeai valoare ca i expresia (list1.0 2.0 3.0)

    Figura 18. Valoare returnata de functia list

    52

  • 8/2/2019 47398143 Lectii LISP Romana

    53/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Exemplu

    Introducei expresiile care urmeaz.

    Legai simbolurile x, y i z de trei numere reale

    Command: (setq x 1.0)1.0Command !x:1.0Command: (setq y 2.0)2.0Command: !y2.0Command: (setq z 3.0)3.0Command: !z3.0

    Folosii variabilele ca argumente la funcialist

    .Command: (list x y z)(1.0 2.0 3.0)

    Memorai lista ntr-o variabil numit pt i folosii-o n cadrul comenziiAutoCAD.

    Command: (setq pt (list x y z))(1.0 2.0 3.0)

    Command: !pt(1.0 2.0 3.0)

    Command: idPoint: !ptX=1.0000 Y=2.0000 Z=3.0000Command:

    50099176.doc R.2.1 9/21/2011 53

  • 8/2/2019 47398143 Lectii LISP Romana

    54/259

    AUTODESK, INC.

    Recapitulare AutoCAD-ul folosete sistemul de coordonate carteziene 3-

    D pentru a specifica punctele.

    Un punct AutoCAD este reprezentat n AutoLISP sub formaunei liste de numere reale.

    AutoLISP-ul reprezint un punct AutoCAD 2-D sub formaunei liste format din dou numere reale.

    Un punct AutoCAD 3-D este reprezentat sub forma uneiliste cu trei numere reale.

    Funcia quote poate construi o list de numere din constante.

    Funcia list poate construi o list de numere din constantesau din variabile.

    54

  • 8/2/2019 47398143 Lectii LISP Romana

    55/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 6: UTILIZAREALISTELORDE NUMERECAPUNCTEAUTOCAD

    n acest exerciiu vei:

    Consolida cunotinele despre relaia dintre listele

    AutoLISP formate din dou sau trei numere reale i puncteleAutoCAD.

    Lega variabile pentru a reprezenta coordonatele unui punct.

    Crea liste ale variabilelor coordonatelor pentru a reprezentapuncte.

    Folosi liste ca rspunsuri la cererile de comand AutoCAD.

    Partea I1. Introducei expresiile n coloana din stnga.

    2. Scriei valoarea returnat a fiecarei expresii n coloana din mijloc.3. Dac o legatur simbol apare n cadrul expresiei, scriei-i valoarea

    n coloana din dreapta.

    Tabelul 15. Crearea punctelor din liste de numere

    50099176.doc R.2.1 9/21/2011 55

    Expresia Valoarea expresiei Simbol de atribuire

    (setq x 1.0) 1.0 x = 1.0

    (setq y 2.0)

    (setq z 0.0)

    (list 1.0 2.0 0.0)

    (list x y z)

    (setq pt1 (list x y z))

    !pt1

    (quote (5.0 6.0 0.0))

    (setq pt2 (quote (5.0 6.0 0.0)))

    !pt2

    (quote (x y z))

    (setq notapoint (quote (x y z)))

    !notapoint

  • 8/2/2019 47398143 Lectii LISP Romana

    56/259

    AUTODESK, INC.

    Partea a II-a1. n acelai desen din partea I introducei expresiile care urmeaz.

    2. Creai o Linie i un Cerc folosind variabilele legate de listeformate din numere reale aa cum snt punctele pentru comenzileAutoCAD.

    3. Legaturile simbol se bazeaz pe partea I a acestui exerciiu.Command: lineFrom point: !pt1To point: !pt2To point: Enter

    Command: circle3P/2P/TTR/: 2pFirst point on diameter: !pt1

    Second point on diameter: !pt2

    5,6,0

    1,2,0

    Figura 19. Linie si cerc folosind variabilele pt1 si pt2

    56

  • 8/2/2019 47398143 Lectii LISP Romana

    57/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Aceast pagin este lsat liber n mod intenionat.

    50099176.doc R.2.1 9/21/2011 57

  • 8/2/2019 47398143 Lectii LISP Romana

    58/259

    AUTODESK, INC.

    Separarea listelor

    Avnd instruciuni pentru construirea listelor - funciile list i quote - ne-ar fide folos s avem i cteva instruciuni pentru separarea listelor.

    Dac am avea un set instruciuni pentru extragerea fiecrui element dintr-olist, atunci am putea realiza mult mai uor programe AutoLISP.

    Desenai un dreptunghi cunoscnd numai coordonatelecolurilor opuse.

    Gsii punctul de mijloc dintre oricare ar fi dou puncte ( nunumai punctele finale ) ale unei linii sau ale unui cerc.

    Determinai dac un punct se afl ntr-o anumit regiune 2-Dsau 3-D a unui sistem de coordonate carteziane.

    De vreme ce acest lucru necesit mai mult dect abilitatea de a separa liste,separarea listelor este o cerin fundamental n aceast operaie.

    Obiective

    n acest capitol vei studia:

    Cum snt reprezentate listele n memoria computerului subforma unui arbore binar.

    Cum snt listele reprezentate grafic.

    Cum s folosii funciile car i edr pentru separarea listelor.

    Cum s separai liste care reprezint puncte n AutoCAD icum s specificai puncte prin crearea unor liste noi bazatepe punctele existente.

    Structura intern a unei liste

    O list AutoLISP este reprezentat n memoria computerului sub formaunui arbore binar. Orice punct de pe arborele binar unde poate aprea oramificaie se numete nod. Nodul este una din unitile fundamentale

    pentru stocarea memoriei n AutoLISP.

    Primul nod de sus al unui arbore binar se numete nodul radacin.

    58

  • 8/2/2019 47398143 Lectii LISP Romana

    59/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Structura unei liste AutoLISP este desfcut nod cu nod, ncepnd de lanodul rdcin. Fiecare nod se desface n dou ramificaii reprezentnddiferite pri ale listei: primul element al listei i lista cu primul elementndeprtat.

    Figura 20. Nodul radacina si primul set de ramificatii pentru o lista.

    De exemplu prima ramificaie a listei (1.0 2.0 3.0) ar putea fi reprezentatastfel.

    (1.0 2.0 3.0)

    1.0 (2.0 3.0)

    Figura 21. Nodul radacina si primul set de ramificatii pentru lista (1.0 2.0 3.0)

    50099176.doc R.2.1 9/21/2011 59

  • 8/2/2019 47398143 Lectii LISP Romana

    60/259

    AUTODESK, INC.

    Subdivizarea de-a lungul ramificaiei arborelui continu pn ce parteadreapt a ramificaiei se termin cu lista goal sau nil.

    (1.0 2.0 3.0)

    1.0 (2.0 3.0)

    2.0 (3.0)

    3.0 ()

    Figura 22. Arbore binar complet pentru lista (1.0 2.0 3.0)

    AutoLISP-ul are apelative speciale pentru cele dou pari ale ramificaieilistei. Primul element al listei se numete car-ul listei. Lista fr primul eielement se numete cdr-ul listei. Ramificaia stng este partea car a listeiiar ramificaia dreapt este parteacdr.

    Figura 23. Partile car si cdr de la nodul radacina al listei.

    60

  • 8/2/2019 47398143 Lectii LISP Romana

    61/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Reprezentarea unei liste cu trei elemente atomice prin car i cdr, creia ieste atribuit simbolul x, ar arta dup cum urmeaz. Dac o list formatdin unul sau mai multe elemente se afl la oricare din nodurile arborelui,este urmat de o ramificaie. Partea stng a ramificaiei este car-ul listei lacare se refer nodul iar partea dreapt este cdr-ul listei la care se refernodul.

    Figura 24. Reprezentarea completa a unei liste cu trei atomi ca elemente cu carsi cdr.

    S combinm graficul care reprezint arborele binar pentru valorile

    simbolului pt, care este legat de lista (1.0 2.0 3.0) cu ramificaiile car i cdrale arborelui.

    Figura 25. Grafic combinat pentru simbolul pt, legat de lista (1.0 2.0 3.0).

    50099176.doc R.2.1 9/21/2011 61

  • 8/2/2019 47398143 Lectii LISP Romana

    62/259

    AUTODESK, INC.

    Recapitulare Listele snt reprezentate n memorie sub forma unui arbore

    binar.

    Primul element al listei este car-ul listei.

    Lista dup ce primul element este ndeprtat reprezint cdr-ul listei.

    Funciile car i cdr formeaz ramificaiile cari cdrale listei.

    O ramificaie cdr a unui arbore binar se termin n nil saulista goal.

    62

  • 8/2/2019 47398143 Lectii LISP Romana

    63/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 7: GRAFULVALORILORINTR-UNARBOREBINAR

    n acest exerciiu vei:

    Consolida cunotinele despre reprezentarea listelor n

    memorie. Completa un grafic a valorilor unei liste, reprezentat sub

    forma unui arbore binar.

    Instruciuni1. Terminai graful complet al unui arbore binar pentru variabila

    alst.

    2. alst este legat de lista (8.0 3.0 0.0).

    3. Artai valoarea fiecarui nod din grafic.

    (8.0 3.0 0.0)

    8.0 ?

    ? ?

    ? ?

    Figura 26. Completarea grafului binar

    50099176.doc R.2.1 9/21/2011 63

  • 8/2/2019 47398143 Lectii LISP Romana

    64/259

    AUTODESK, INC.

    EXERCITIUL 8: GRAFULEXPRESIILORINTR-UNARBOREBINAR

    n acest exerciiu vei:

    Consolida cunotinele despre separarea listelor i

    restabilirea elementelor lor individuale. Completa un grafic al expresiilor care restabilesc elementele

    unei liste, grafic reprezentat sub forma unui arbore binar.

    Instruciuni1. Terminai graficul complet al unui arbore binar pentru variabila

    xlst.

    2. xlst este legat de lista (1.0 (2.0 3.0) 4.0).

    3. Artai valoarea fiecrui nod din grafic

    4. Artai expresia care restabilete fiecare valoare din grafic.5. Marcai ramificaiile cari cdrale unui arbore.

    6. Observai c elementele acestei liste snt formate din doi atomi i olist.

    (1.0 (2.0 3.0) 4.0)

    1.0 ((2.0 3.0) 4.0)

    (2.0 3.0) ?

    ? ?

    (car xlst) (cdr xlst)

    (car (cdr xlst))

    (car (car (cdr xlst)))

    (cdr (cdr xlst))

    xlst

    ? ?

    ? ? ?

    ? ?

    ? ?

    Figura 27. Completarea graficul binar

    64

  • 8/2/2019 47398143 Lectii LISP Romana

    65/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Funciile car si cdr

    Funciile car i cdr snt funcii non-destructive. Nici una dintre ele nu

    afecteaz legarea argumentului ei ceea ce este un mod curios de a spunedespre (car x) c poate returna o valoare diferit de x dar nu va schimbavaloarea lui x.

    car

    Funcia car returneaz primul element al listei. Singurul argument alfunciei car trebuie s fie o list, iar lista trebuie s aib unul sau mai multeelemente.

    Exemplu

    Introducei expresia care urmeaz. Legai variabila pt la o list cu treinumere reale. Folosii funcia car pentru a returna coordonata x n list(primul element) i legai variabila x de acea valoare.

    Command: (setq pt (list 1.0 2.0 0.0))(1.0 2.0 0.0)Command: !pt(1.0 2.0 0.0)

    Command: (car pt)1.0

    Command: (setq x (car pt))1.0Command: !x1.0

    Command: !pt(1.0 2.0 0.0)

    cdr

    Funcia cdrreturneaz o list i elementele ei cu excepia primului element;

    cu alte cuvinte ndeprteaz primul element al listei n afara valorii luireturnate.

    50099176.doc R.2.1 9/21/2011 65

  • 8/2/2019 47398143 Lectii LISP Romana

    66/259

    AUTODESK, INC.

    Exemplu

    Introducei expresiile care urmeaz.

    Legai variabila pt de o list cu trei numere reale.

    Command: (setq pt (list 1.0 2.0 0.0))(1.0 2.0 0.0)

    Command: !pt(1.0 2.0 0.0)

    Folosii funcia cdr pentru a returna o list fr primul element i legaivariabila yzlst de acea valoare.

    Command: (cdr pt)(2.0 0.0)

    Command: (setq yzlst (cdr pt))(2.0 0.0)

    Command: !lyzlst(2.0 0.0)

    Command: !pt(1.0 2.0 0.0)

    Construirea unui dreptunghi cunoscnd colurile opuse

    n figurile care urmeaz cunoatem dou puncte din colurile unuidreptunghi. Celelalte dou puncte se calculeaz prin combinarea

    cordonatelor X i Y ale punctelor cunoscute n diverse moduri pentru aforma noi perechi de coordonate.

    Figura 28. Valorile X si Y pentru colturile unui dreptunghi.

    66

  • 8/2/2019 47398143 Lectii LISP Romana

    67/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Aceast pagin este lsat liber n mod intenionat

    50099176.doc R.2.1 9/21/2011 67

  • 8/2/2019 47398143 Lectii LISP Romana

    68/259

    AUTODESK, INC.

    Figura care urmeaz reprezint coordonatele punctelor n funcie de variabilele X i Y.

    X1,Y1

    X1,Y2

    X2,Y1

    X2,Y2

    0,0

    Figura 29. Valorile X,Y pentru colturile dreptunghiului

    Considerai c dou variabile snt legate de cele dou liste formate dinnumere reale.

    (setq pt1 (list 1.0 5.0 0.0))

    (setq pt2 (list 10.0 1.0 0.0))Acest tabel arat funciile necesare pentru returnarea valorilor X, Y i Z dinfiecare punct.

    coordinate pt1 pt2

    X (car pt1) (car pt2)

    Y (car (cdr pt1)) (car (cdr pt2))

    Z (car (cdr (cdr pt1))) (car (cdr (cdr pt2)))

    Tabelul 16. Expresiile folosite pentru returnarea coordonatelor X, Y si Z.

    68

  • 8/2/2019 47398143 Lectii LISP Romana

    69/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Figura urmtoare exprim punctele de coordonate sub forma de expresiiAutopLISP, bazate pe cunoaterea a dou puncte pt1 i pt2. Pentru asimplifica lucrurile, acestea snt tratate ca puncte 2-dimensionale.

    pt1

    (list (car pt1) (car (cdr pt2)))

    (list (car pt2) (car (cdr pt1)))

    pt2

    0,0

    Figura 30. Calcularea colturilor unui dreptunghi

    50099176.doc R.2.1 9/21/2011 69

  • 8/2/2019 47398143 Lectii LISP Romana

    70/259

    AUTODESK, INC.

    Exemplu

    Introducei expresiile care urmeaz.

    Folosii funcia list pentru a le combina n alte dou puncte ale

    dreptunghiului.Command: (setq pt1 (list 1.0 5.0))(1.0 5.0)

    Command: !pt1(1.0 5.0)

    Command: (setq pt3 (list 10.0 1.0))(10.0 1.0)

    Command: !pt3(10.0 1.0)

    Folosii funciile car i cdr pentru a extrage valorile X i Y ale punctelorcunoscute.

    Command: (car pt1)1.0

    Command: (car (cdr pt3))1.0

    Command: (list (car pt1) (car (cdr pt3)))(1.0 1.0)

    Command: (setq pt2 (list (car pt1) (car (cdr pt3))))(1.0 1.0)

    Command: !pt2(1.0 1.0)

    Command: (car pt3)10.0

    Command: (car (cdr pt1))5.0

    Command: (list (car pt3) (car (cdr pt1)))(10.0 5.0)

    70

  • 8/2/2019 47398143 Lectii LISP Romana

    71/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Command: (setq pt4 (list (car pt3) (car (cdr pt1))))(10.0 5.0)

    Command: !pt4(10.0 5.0)

    Desenai dreptunghiul folosind linia de comand AutoCAD.

    Punctele snt 2-dimensionale. Linia de comand AutoCAD va completaautomat valoarea Z a punctului bazat pe valoarea curent a inlimii(elevation).

    Command: lineFrom point: !pt1To point: !pt2To point: !pt3To point: !pt4To point: close

    1,5

    1,1

    10,5

    10,1

    0,0

    pt1

    pt2 pt3

    pt4

    Figura 31. Localizarea colturilor unui dreptunghi

    Recapitulare Funcia car returneaz primul element al unei listei.

    Funcia cdr returneaz o list cu excepia primului element.

    Exist funcii standard la care se face apel pentru stabilireacomponentelor X, Y i Z ale unui punct reprezentat printr-olist.

    50099176.doc R.2.1 9/21/2011 71

  • 8/2/2019 47398143 Lectii LISP Romana

    72/259

    AUTODESK, INC.

    EXERCITIUL 9: LUCRULCULISTEDEPUNCTE

    n acest exerciiu vei:

    Consolida cunotinele despre funcii care separ liste i

    funcii care creaz liste. Crea puncte formate din liste i le vei lega de variabile.

    Crea puncte formate din liste bazate pe valorile X i Y dinalte puncte formate din liste.

    Matematica problemei

    Dou puncte 2-dimensionale i punctul care se afl la mijlocul distaneidintre ele pot fi exprimate logic n funcie de X i Y dup cum urmeaz.

    pt1 = pt1x, pt1ypt2 = pt2x, pt2ymidpt = mptx, mpty

    Valorile X i Y ale lui mpt pot fi exprimate aritmetic dup cum urmeaz.

    mptx = (pt1x + pt2x)/2mpty = (pt1y + pt2y)/2

    Instruciuni

    Scriei un set de expresii AutoLISP care execut urmatoarele comenzi nordine

    1. Legai o variabilpt1 de lista format din dou numere reale 1.5i 8.9.

    2. Legai o variabil pt2 de o list format din dou numere reale7.8 i 3.2.

    3. Scriei un set de expresii care leag variabila midpt de punctulcare se afl la mijlocul distanei dintre punctelept1 ipt2.

    Dup ce ai verificat expresiile n editorul AutoCAD scriei-le mai jos.

    72

  • 8/2/2019 47398143 Lectii LISP Romana

    73/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Comenzi AutoCAD si AutoLISP

    Comenzile AutoCAD pot fi chemate direct din AutoLISP, s-expresiileAutoLISP pot fi folosite ca rspunsuri la cererile de comand.

    Obiectiven acest capitol vei studia:

    Cum s chemai o comand AutoCAD direct din AutoLISP.

    Cum s folosii irul AutoLISP, s-expresiile constante ivariabile ca rspunsuri la cererile de comand.

    Sintaxa funciei AutoLISP command.

    Cum s evitai lucrul cnd traducei un program folosindcomenzile n limba englez indiferent de versiuneaAutoCAD.

    Funcia command

    Funcia command apeleaz funciile AutoCAD din AutoLISP. Funciacommand accept un argument de tip ir care trebuie s fie numele uneicomenzi AutoCAD i oricare alte argumente opionale care ar fi n modnormal introduse n linia de comand.

    n cazurile n care este nevoie de un return ca rspuns la o comand, irul ""este folosit ca argument. Aceasta este reprezentarea AutoLISP a iruluinul pe care AutoCAD-ul o interpreteaz ca un return n cadrul funciei

    apelative command.Funcia command accept iruri i variabile AutoLISP ca argumente. Deexemplu aceste trei seturi de expresii traseaz aceeai entitate Line.

    Folosirea argumentelor de tip ir

    Command:(command "line" "1,1" "5,5" "")nil

    Folosirea argumentelor constante

    Command:(command "line (quote (1.0 1.0)) (quote (5.0 5.0)) "")nil

    Folosirea argumentelor variabile

    Command: (setq pt1 (list 1.0 1.0) pt2 (list 5.0 5.0))(5.0 5.0)

    Command: (command "line" pt1 pt2"")nil

    50099176.doc R.2.1 9/21/2011 73

  • 8/2/2019 47398143 Lectii LISP Romana

    74/259

    AUTODESK, INC.

    Efecte secundare

    Funcia command returneaz ntotdeauna nil. Efectul secundar al uneiexpresii command este mult mai interesant dect valoarea returnat. Un efectsecundar al unei expresii AutoLISP reprezint o schimbare n stareaprogramului care se produce datorit unei funcii de apelare. Efectulsecundar al apelrii unei funcii setq este pentru a crea un nou simbol delegatur sau pentru a atribui o valoare la o variabil. Efectul secundar alapelrii unei funcii command este de a realiza o comand AutoCAD caremodific fiierul grafic ntr-un anume fel.

    Exemplu

    ncepei un desen nou.

    Introducei expresiile care urmeaz.

    Legai dou variabile de dou puncte 2-dimensionale.Command: (setq pt1 (list 1.0 1.0))(1.0 1.0)

    Command: (setq pt2 (list 5.0 5.0))(5.0 5.0)

    Apelai la comanda LINE i folosii variabilele ca argumente.

    Command: (command "line" pt1 pt2 "")nil

    1,1

    5,5

    Figura 32. Linie de la 1.1 la 5.5

    74

  • 8/2/2019 47398143 Lectii LISP Romana

    75/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Exemplu

    Introducei expresiile care urmeaz.

    Folosii variabilele pt1 i pt2 de la exerciiul anterior ca puncte reprezentnd

    centrele a dou cercuri i ca puncte finale ale diametrului unui cerc.Command: circle3P/2P/TTR/: !pt1Diameter/: 0.5Command: (command "circle" pt2 0.5)Command: (command "circle" "2p" pt1 pt2)

    Figura 33. Cercuri definite de pt1 si pt2

    50099176.doc R.2.1 9/21/2011 75

  • 8/2/2019 47398143 Lectii LISP Romana

    76/259

    AUTODESK, INC.

    Exemplu

    Folosii valorile lui pt1 ipt2 de la exerciiul anterior.

    Introducei expresiile care urmeaz.

    Desenai dou arce folosindpt1 ipt2 ca puncte finale i o valoare a razei de3.5.

    Command: arcCenter/: !pt1Center/End/: eEnd point: !pt2Angle/Direction/Radius/: rRadius: 3.5

    Command:(comandarc pt2 e pt1 r 3.5)

    Figura 34. Arce definite de pt1 si pt2

    76

  • 8/2/2019 47398143 Lectii LISP Romana

    77/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Globalizarea comenzilor

    Toate versiunile AutoCAD-ului vor accepta comenzile i opiunile dinlimbajul american i englezesc indiferent de versiunea limbii surs. Acestlucru permite utilizatorului s scrie o aplicaie AutoLISP care poate fifolosit n toate versiunile de limbaj ale AutoCAD-ului fr a traducefunciile command n limba surs.

    Fiecare versiune AutoCAD tradus ntr-o anumit limb pastreaz un menude opiuni i comenzi din limba surs. De exemplu versiunea germanAutoCAD pastreaz un menu de opiuni i comenzi n limba german astfelncit cei care o folosesc i pot introduce comenzile n german. Toateversiunile AutoCAD indiferent de limba surs pstrez un menu de opiunii comenzi n engleza american mpreun cu un menu n limba surs.

    Pentru a folosi versiunea englezeasc a comenzilor i opiunilor AutoCAD,

    prefaati irul cu un caracter subliniere sau cu "_". De exemplu acestaeste modul n care se apeleaz la linia de comand n toate versiunileAutoCAD.

    Command:(command "_line" "1.1" "5.1" "1.5" "_c")

    Recapitulare

    Functia command permite apelarea comenzilor AutoCAD dinAutoLISP.

    irul nul sau "" este tratat ca un return de ctre funcia command.

    Expresiile AutoLISP snt acceptate ca rspunsuri la cererile decomand AutoCAD n cadrul funciei command.

    Argumentele funciei command snt numele comenzii AutoCADurmate de rspunsurile la cererile de comand.

    Caracterul subliniere poate fi prefaat n cadrul unei instruciunide tip command n engleza american i va funciona n toate versiunile delimbaj ale AutoCAD-ului.

    50099176.doc R.2.1 9/21/2011 77

  • 8/2/2019 47398143 Lectii LISP Romana

    78/259

    AUTODESK, INC.

    EXERCITIUL 10: TRANSFORMAREACOMENZILORINAUTOLISP

    n acest exerciiu vei:

    Transforma comenzile AutoCAD script n expresii

    AutoLISP. Scrie expresiile.

    Testa expresiile n editorul AutoCAD.

    Instruciuni1. ncepei un desen nou.

    2. Transformai comenzile i cererile AutoCAD n expresii alefunciei command. Scriei rspunsurile n coloana din dreapta.

    3. Testai expresiile n editorul AutoCAD.

    Comenzi si cereri

    Command: lineFrom point: 1,1To point: 5,5To point: ENTER

    Command: circle

    3P/2P/TTR/: 3,3Diameter/: 0.5

    Command: circle3P/2P/TTR/: 2pFirst point on diameter: 1,1Second point on diameter: 5,5

    Command: arcCenter/: 2,1Center/End/: cCenter: 1,1Angle/Length of chord/: lLength of chord: 1.414

    Expresii AutoLISP

    (command "line" "1,1" "5,5" "")

    or

    (command "line" '(1.0 1.0) '(5.0 5.0) "")

    Tabelul 17. Traducerea comenzilor in AutoLISP

    78

  • 8/2/2019 47398143 Lectii LISP Romana

    79/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    EXERCITIUL 11: APELULCOMENZIIPOLYLINEDINAUTOLISP

    n acest exerciiu:

    Vei folosi AutoLISP-ul pentru a executa o comand

    AutoCAD i pentru a desena o nou entitate. Vei apela comanda AutoCAD PLINE din AutoLISP.

    Vei scrie un set de expresii AutoLISP pentru a desena opolilinie rectangular.

    Instruciuni1. ncepei un desen nou.

    2. Creai urmatoarele legaturi de variabile n AutoCAD:

    (setq pt1 (list 1.0 1.0 0.0))

    (setq pt3 (list 11.0 8.0 0.0))

    3. Folosii variabilelept1 ipt3.

    4. Scriei un set de expresii ce vor desena un dreptunghi, folosindcomanda "Polyline" opiunea 2-D nchis de la punctul 1,1 la 11,1la 11,8 la 1,8, folosind variabilele pt1 ipt3.

    5. Folosii funciile car, cdr, list i command dac este nevoie.

    6. Testai expresiile n AutoCAD.

    7. Scriei-le mai jos.

    50099176.doc R.2.1 9/21/2011 79

  • 8/2/2019 47398143 Lectii LISP Romana

    80/259

    AUTODESK, INC.

    Aceast pagin a fost lsat liber n mod intenionat.

    80

  • 8/2/2019 47398143 Lectii LISP Romana

    81/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Selecia interactiv a punctelor

    AutoLISP-ul dispune de funcii care opresc evaluarea unei expresii i permit utilizatorului s stocheze puncte i distane folosind metodelestandard AutoCAD de specificare a acestor valori. Punctul sau distana

    devine valoarea returnat a expresiei.

    Obiective

    n acest capitol vei studia:

    Cum s cerei informaii utilizatorului n cadrul unuiprogram AutoLISP.

    Cum s cerei coordonatele unui punct utilizatorului.

    Cum s cerei o distan utilizatorului.

    Cum s cerei utilizatorului valoarea pe care o dorii.

    Cum s folosii puncte i distane de la utilizator n cadrulfunciilor AutoLISP command i comenzilor AutoCAD.

    Puncte si distane

    Funcia getpoint permite utilizatorului s selecteze un punct folosind oricemetode standard AutoCAD de selectare a punctelor: selectare grafic,coordonate absolute, relative sau relative polare, agarea obiectelor, filtrede coordonate sau accesarea ultimului punct.

    Funcia getdist permite utilizatorului s specifice o distant prin introducerea

    valorii sau seleciond dou puncte. Este acelai mecanism folosit de fiecarecomand AutoCAD care cere utilizatorului o distan.

    getpoint

    Funcia getpoint folosete serviciile AutoCAD pentru a permite utilizatoruluis introduc un punct. Punctul selectat de utilizator reprezint valoareareturnat a expresiei. AutoLISP-ul returneaz punctul sub forma unei listeformat din trei numere reale: valorile coordonatelor X, Y i Z.

    Command:(getpoint)1,1,0(1.01.00.0)

    Funcia getpoint este folosit pentru a obine un punct de la utilizator ncadrul unei expresii AutoLISP. De exemplu ar putea fi nevoie s cereiutilizatorului din cadrul unui program AutoLISP, puncte care vor fi folositeapoi ca puncte finale ale unei linii.

    50099176.doc R.2.1 9/21/2011 81

  • 8/2/2019 47398143 Lectii LISP Romana

    82/259

    AUTODESK, INC.

    Command:(setq pt1 (getpoint))1,1(1.0 1.0 0.0)

    Command:(setq pt2 (getpoint))5,5

    (5.0 5.0 0.0)Command:(command line pt1 pt2 )

    Deoarece toate serviciile AutoCAD de specificare a punctelor sntdisponibile n timpul apelrii funciei getpoint, nu sntei constrns sintroducei coordonatele exacte ale punctului.

    Command:(setq pt1 (getpoint))

    Command:(setq pt2 (getpoint))

    Command:(command line pt1 pt2 )

    Exemplu

    Introducei expresiile care urmeaz. Legai variabilele pt1 i pt2 de punctepe care le selectai cu mouse-ul n cadrul unei funcii de apelare getpoint ifolosii variabilele ntr-o comanda LINE.

    Command: ( setq pt1 (getpoint))pick a point

    Command: (setq pt2 (getpoint))pick a point

    Command:(command line pt1 pt2)

    Exemplu

    Introducei expresiile care urmeaz. Legai variabilapt1 de un punct pe carel selectai cu mouse-ul i variabila pt2 de un punct descris de coordonatelepolare relative. Folosii variabilele n linia de comand.

    Command:(setq pt1 (getpoint ))pick a point

    Command:(setq pt2 (getpoint))@2

  • 8/2/2019 47398143 Lectii LISP Romana

    83/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Command: (command line pt1 pt2 )

    Exemplu

    Introducei expresiile care urmeaz. Legai variabilapt1 de un punct pe care

    l selectai cu mouse-ul n cadrul unei funcii de apelare getpoint i folosiivariabila ntr-o comand CIRCLE.

    Command:(setq pt1 (getpoint))pick a point

    Command:(command circle pt1 0.5)

    getdist

    Funcia getdist cere utilizatorului dou puncte. Valoarea returnat este unnumr real: distana 3-D ntre dou puncte.

    Command:(setq dst1 (getdist))Second point: 2,21.41421Command: !dst11. 41421

    Funcia getdist primete un argument opional, punctul de baz de la carese msoar distana. n acest caz funcia cere utilizatorului un singur punct.

    Command: (setq pt1 (list 1.0 1.0 0.0))(1.0 1.0 0.0)Command: (setq dst1 (getdist pt1))2,21.41421Command: !dst11.41421

    50099176.doc R.2.1 9/21/2011 83

  • 8/2/2019 47398143 Lectii LISP Romana

    84/259

    AUTODESK, INC.

    Figura 35. Functia getdist drag din punctul initial 1,1,0

    ExempluIntroducei expresiile care urmeaz. Legai variabila pt1 de un punctfolosind coordonatele absolute i variabila rad de distana dintre dou

    puncte pe care o selectai cu mouse-ul. Folosii variabila n comandaCIRCLE.

    Command: (setq pt1 (getpoint))5,5(5.0 5.0 0.0)Command: (setq rad (getdist))pick two points

    Command: (command circle pt1 rad)

    Exemplu

    Introducei expresiile care urmeaz. Legai variabila cen de un punct pe carel selectai cu mouse-ul. Legai variabila rad de distana dintre cen i un

    punct pe care l selectai cu mouse-ul. Folosii variabilele n comandaCIRCLE.

    Command: (setq cen (getpoint))pick a point

    Command: (setq rad (getdist cen))pick a point

    Command: (command circle cen rad)

    84

  • 8/2/2019 47398143 Lectii LISP Romana

    85/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Dialog cu utilizatorul

    Funciile getpoint i getdist primesc i argumente opionale: un ir de textcare este afiat n zona liniei de comand ca o cerere pentru utilizator.

    Command: (getpoint Point:)Point: 1,1(1.0 1.0 0.0)

    Dac getdist cere dou puncte, se cere automat al doilea punct "Secondpoint:".

    Command: (getdist From point:)From poin: 1,1(1.0 1.0 0.0)Second point: 2,21.41421

    Deoarece getdist primete dou cereri opionale, ordinea i tipul de date nacest caz snt importante. Dac primul argument al funciei getdist este unir, acesta reprezint o cerere. Dac primul argument este un punct, atuncise poate proceda la cererea celui de-al doilea argument.

    Command: (getdist (quote (1.0 1.0 0.0)) To point:)To point: 2,21.41421

    Recapitulare

    Funcia getpoint returneaz un punct de la utilizator.

    Funcia getdist returneaz o distan dat sub forma unui

    numr real de la utilizator. Ambele funcii primesc argumente opionale pentru

    utilizator.

    Utilizatorul poate aplica oricare dintre metodele AutoCADde specificare a punctelor i distanelor la o cerere AutoLISP

    pentru un punct sau o distan.

    50099176.doc R.2.1 9/21/2011 85

  • 8/2/2019 47398143 Lectii LISP Romana

    86/259

    AUTODESK, INC.

    EXERCITIUL 12: CEREREASIFOLOSIREAPUNCTELORDELAUTILIZATOR

    n acest exerciiu vei:

    Scrie expresiile care cer utilizatorului puncte i distane.

    Scrie comenzile de desenare n AutoCAD.

    Partea I

    Instruciuni

    Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.

    1. Cerei utilizatorului patru puncte.

    2. Atribuii-le variabilelorpt1 prinpt4.

    3. Trasai o polilinie 2-D nchis ntre cele patru puncte.

    Partea a II-a

    Instruciuni

    Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.

    1. Cerei utilizatorului un punct centru i atribuii valoarea uneivariabile numite cen.

    2. Cerei utilizatorului distana de la variabila cen i atribuii valoareaunei variabile numite rad.

    3. Desenai un cerc cu centrul cen i raza rad.

    86

  • 8/2/2019 47398143 Lectii LISP Romana

    87/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Partea a III-a

    Instruciuni

    Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.

    1. Cerei utilizatorului dou puncte.

    2. Atribuii-le variabilelorpt1 ipt2.

    3. Desenai o polilinie 2-D nchis.

    4. Folosiipt1 ipt2 pentru colurile opuse ale poliliniei.

    5. Calculai celelalte dou puncte din pt1 i pt2 folosind funciile car,cdri list.

    50099176.doc R.2.1 9/21/2011 87

  • 8/2/2019 47398143 Lectii LISP Romana

    88/259

    AUTODESK, INC.

    Aceast pagin a fost lsat liber n mod intenionat.

    88

  • 8/2/2019 47398143 Lectii LISP Romana

    89/259

    AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP

    Funcii

    Pe lng funciile interne, AutoLISP-ul permite crearea funciilor definitede utilizator, adic funcii ale caror seturi de instruciuni i nume au fostdefinite.

    Obiective

    n acest capitol vei studia:

    Definiia funciei AutoLISP.

    Cum s creai propriile funcii AutoLISP.

    Sintaxa funciei defun.

    Cum s trimitei argumente unei funcii.

    Cum returneaz funcia o valoare.

    Funciile si evaluarea listelor

    Considerai procesul de evaluare al unei expresii tipice care folosete ofuncie intern AutoLISP.

    (setq x 10)

    AutoLISP-ul evalueaz primul element unde se ateapt s gasesc ofuncie. Aici gsete subprogramul setq i reface legtura. Legarea lui setqreprezint un set de instruciuni care arat cum trebuie facut procesarea.AutoLISP-ul evalueaz argumentele lui setq n ordine i termin prinaplicarea instruciunilor de procesare la valoarea argumentelor.

    Rezultatul n acest caz este o valoare returnat, 10, pentru expresie i unefect secundar al variabilei x care este legat de 10.

    setq este un subprogram i instruciunile lui au fost predefinite n AutoLISP.Utilizatorul nu le poate schimba. Totui este posibil crearea unor noifuncii care s execute orice instruciuni de procesare dorite de utilizator.

    Legturi noi se creaz prin folosirea subprogramului defun care este funciade definire.

    50099176.doc R.2.1 9/21/2011 89

  • 8/2/2019 47398143 Lectii LISP Romana

    90/259

    AUTODESK, INC.

    Sintaxa funciei defun

    Sintaxa funciei defun este puin diferit de cea a celorlalte funcii folositepn acum.

    (defun ( / ) ...)

    defun cere obligatoriu dou argumente i un numr variabil de argumentecare urmeaz dup primele dou.

    Argumentele funciei defun

    Primul argument al funciei este numele noii funcii de definit. Folosii unnume nou pe care l-ai creat, de preferin unul care descrie aciunile

    funciei.

    ATEN}IE Nu folosii niciodat numele unei funcii sau a unui simbolconstruite intern deoarece acesta se va suprapune peste definiia original il va face inaccesibil pn lansai AutoLISP-ul n cadrul unei noi sesiuniAutoCAD.

    n acest exemplu, primul argument al funciei defun este numele simbolmyfun care devine numele funciei definite de utilizator.

    (defun myfun ( / ) ...)

    Al doilea argument cerut de defun este o list de argumente cerute ivariabile locale. Cel