Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAlbert Faragó Megváltozta több, mint 10 éve
1
Grafikus tervezőrendszerek programozása 2. előadás
2
AutoLisp alapelemek (ismétlés) Alapelemek: –Listák –Atomok Konstans atomok Szimbólikus atomok –Speciális atomok nil, t
3
Lisp interpreter (ismétlés) Interaktív végrehajtás Lisp végrehajtási ciklus: read-eval-print –Beolvassa a „programot” (file vagy gépelt) –Kiértékeli –Az eredményt kinyomtatja
4
Kiértékelés sorrendje (ismétlés) Konstans atom értéke: maga az atom Szimbólikus atom értéke: a szimbólumhoz rendelt értéke Lista esetén: –Az első elem a listában egy függvény neve –A többi elem az argumentumokat jelenti –Függvény lista is lehet argumentum –Általános alak: (függvény1 arg1... (függvény2 arga)...)
5
Listák A lista elemeit el kell érni, ehhez a listát részekre kell szedni –Megkülönböztetjük a lista első elemét (fejét) és maradékát A lista feje is egy S-kifejezés, így atom vagy lista A lista maradéka „mindig lista”
6
Lista példa (ez egy lista) –Lista feje: ez –Lista maradéka: (egy lista) ((elso elem)(masodik elem)(harmadik)) –Lista feje: (elso elem) –Lista maradéka: ((masodik elem)(harmadik)) (egy-elem) –Lista feje: egy-elem –Lista maradéka: () vagy üres lista
7
Lista példa Üres lista: () vagy nil Nem üres lista: (nil) –Lista feje: nil –Lista maradéka !!!: () vagy nil
8
Pontozott párok Szükség lehet olyan listára, amelynek a maradéka nem lista Két S-kifejezés, közöttük egy pont (fej. maradek) –Lista feje: fej –Lista maradéka !!!: maradek
9
Pontozott párok Maradék is lehet S-kifejezés (fej. (pont utani lista)) –Lista feje: fej –Lista maradéka: (pont utani lista) Ami egyenértékű a következővel (fej (pont utani lista)) –Lista feje: fej –Lista maradéka: (pont utani lista)
10
Pontozott párok Minden lista egyben pontozott pár is (fej. (pont. (utani. (lista. nil)))) De általában nem ezt a jelölést hanem a hagyományos jelölést használjuk (fej pont utani lista. nil)
11
Listák reprezentálása 1. Listák reprezentálhatók bináris faként Bináris fa levelei az atomok Bináris csomópontok (Kétfelé ágaznak el) Egyszerű példa: (a b)
12
Listák reprezentálása 2. Csomóponttól bal és jobb oldali ág indul –Bal oldali ág lekérdezése: car –Jobb oldali ág lekérdezése: cdr (mindig listát ad vissza !!!) Az „utolsó” atom egy üres lista vagy nil –Egyszerű példa: (a b) (car ‘(a b)) = a (cdr ‘(a b)) = (b) (car (cdr ‘(a b))) = b (cdr (cdr ‘(a b))) = nil
13
Listák reprezentálása 3. ( (a b) (c d) ) (car...) = (a b) (car (car...)) = a (cdr...) = ((c d)) (car (cdr...)) = (c d) ( () () )
14
Listák létrehozása Kifejezések sorozatából lista: list (list ‘a ‘b ‘c)=(a b c) Két kifejezésből lista: cons (construct) (cons ‘a ())=(a) (cons ‘a (cons ‘b (cons ‘c ()))) =(a b c) (cons ‘a ‘(b c))=(a b c)
15
Pontozott párok 1. Második argumentum is atom ! (cons ‘a ‘b) = (a. b) (car ‘(a. b)) = a (cdr ‘(a. b)) = b (list ‘a ‘b) = (a b) (car ‘(a b)) = a (cdr ‘(a b)) = (b)
16
Pontozott párok 2. (cons ‘a (cons ‘b ‘c)) = (a b. c) Pont utáni rész a lista cdr része (a. (b. c)) (a. (b. (c. nil))) (a b c)
17
Listakezelő függvények 1. car és cdr függvények kombinációja: –cadr, cddr, caar, cdar –caaar, caadr, caddr, cdddr Utolsó elem elérése (last ‘(a b c)) = c Lista n-edik elemének elérése (nth 2 ‘(0 1 2))=2 (nth 0 ‘(a b c))=a
18
Listakezelő függvények 2. Elemek sorrendjének megváltoztatása (reverse ‘(a b c))= (c b a) (reverse ‘(1 2 (3)))= ((3) 2 1) Listák összefűzése (append ‘(m a) ‘(m a)) = (m a m a) Lista hossza (length ‘(1 2 3))= 3 (length ‘())= 0 Elem kicserélése (subst ‘l ‘k ‘((m a) k i) ) = ((m a) l i)
19
Függvények definíciója (defun szimbólum (arg1 arg2... / arg3...) kifejezések... ) –szimbólum – a függvény neve –arg1, arg2,... – a függvény argumentumai –arg3... – lokális változók –kifejezések – a függvény végrehajtása során értékelődnek ki
20
Függvény visszatérési értéke Minden függvénynek van visszatérési értéke ! –C programozási nyelvben van void típus, itt nincs. –Legfeljebb nem vesszük figyelembe a visszaadott értéket. A visszatérési érték az utolsó kifejezés értéke !
21
Függvény példa Visszatérési érték: (defun add23 (x) (+ 23 x) )=add23 (add23 32)=55 (add23 4.0)=27.00000 (defun masodik (x) (car (cdr x)) )=masodik (masodik ‘(1 2 3))=2
22
Függvény neve A függvények neve írja le, hogy mit csinál a függvény: –Jó: rajz_negyszog, doboz –Rossz: xxzedsf, int34 Beépített függvény nevét ne használjuk, mert így a beépített függvény nem lesz többé használható.
23
Bonyolultabb példa Egy mozi tulajdonosa szeretné megállapítani a jegyek árát. Minnél drágább a jegy annál kevesebb a látogató a moziban. Több előadás alapján sikerült megállapítania egy kapcsolatot a jegy ára és a résztvevők száma között.
24
Összefüggések 5 dolláros jegy árnál 210 ember néz meg egy filmet. Ha csökkenti az árat 10 centtel, akkor 15-el több ember jön el. (De több ember több költséggel jár.) Minden előadás 180 dollárba kerül (film ára). Minden látogató 4 centbe kerül ezen felül.
25
Kérdések A mozi tulajdonosa szeretné megtudni, hogy milyen kapcsolat van a profit és a jegy ára között, ill. milyen jegy árnál kereshet a legtöbbet.
26
Kapcsolatok profit = bevétel – költség bevétel = látogatók száma * jegy ára –Látogatók száma a jegy árától függ: 210 ember 5$ -os áron Ezen felül 0.10$15 ember (eltérés)5$ – árx x = … költség = 180$ + 0.04$ * látogatók száma
27
Program 1. (defun profit (price) (- (* (+ 210 (* (/ 15 0.10) (- 5.00 price))) price) (+ 180 (* 0.04 (+ 210 (* (/ 15 0.10) (- 5.00 price)))))))
28
Program 2. (defun profit (ár) (- (bevétel ár) (kiadás ár)) ) (defun bevétel (ár) (* (résztvevők ár) ár) ) (defun kiadás (ár) (+ 180 (* 0.04 (résztvevők ár))) ) (defun résztvevők (ár) (+ 210 (* (/ 15 0.10) (- 5.00 ár))) )
29
Értékadás, változók (setq szimbólum kifejezés) Beállítja a szimbólumot / változót a második argumentum / kifejezés kiértékelésének eredményére Például: –(setq radius 2.3)=2.3 –radius=2.3 –(setq lista ‘(1 2))=(1 2) –(setq szam (+ 2 radius))=4.3 –(setq a 1.2 b 3.4)=3.4
30
Változók típusa A változóknak nincs előredefiniált típusa Bármilyen típusú lehet (szám, szöveg, lista,...) Típusát menet közben is változtathatja!!! Változó értéke (setq radius 2.3) = 2.3 (setq radius “aa”) = “aa” (setq radius ‘(1 2 3)) = (1 2 3)
31
Változók neve A változók neve írja le, hogy mit tartalmaz: –Jó: kezdopont, hossz –Rossz: tt, val34 Beépített függvény vagy változó nevét ne használjuk, mert így a beépített függvény vagy változó eredeti értéke nem lesz többé használható. Például ne definiáljuk: nil, car, cdr
32
Változók használata Egy változót csak egy dologra használjunk Próbáljuk elkerülni a globális változók használatát Nagyobb programban konstans adatok helyett is használjunk változót, így könnyebb később megváltoztatni
33
Még egy értékadó függvény (set szimbólum kifejezés) Beállítja a szimbólum kiértékelésének eredményét a kifejezés kiértékelésének eredményére Például: –(setq a 6.0)=6.0 –(set ‘b a)=6.0 –b=6.0 –(set ‘c ‘b)=b –(set c 1)=1 –c=b –b=1
34
Lokális-globális változók Függvényen kívül használt setq, set globális változót definiál Lokális változó definiálása: (defun fvg ( / lok1 )... ) Egy lokális változó „eltakarhat” (shadow) egy másik globális vagy lokális változót
35
Példa 1. (defun a () (setq x 2) ) (setq x 1) (a) ;belépésnél (setq x 2) x x1 x1 x2 x2
36
Példa 2. (defun a ( x ) ; arg -> új doboz (setq x 2) ); kilépésnél elveszünk dobozt (setq x 1) (a 3) ;belépésnél (setq x 2) x x1 x1 x1 x1 3 2
37
Példa 3. (defun a ( / x ) ; lokális változó -> új doboz (setq x 2) ) ; kilépésnél elveszünk dobozt (setq x 1) (a) ;belépésnél (setq x 2) x x1 x1 x1 x1 nil 2
38
Függvény függvényben Melyik változó és függvény honnan érhető el ? (defun my_prog ( / Var1 Var2) (defun sub_prog ( ) (list Var1 Var2) ) (setq Var3 (sub_prog)) )
39
AutoCAD parancs definiálása A függvény neve speciálisan definiált: C:parancs_nev A függvény argumentistája üres kell legyen Az így definiált függvény közvetlenül végrehajtható AutoCAD parancs lesz ! (defun c:ketto () (+ 1 1) )
40
Összehasonlítás 1. AutoLISP AutoCAD (defun ketto () (defun c:ketto () (+ 1 1) (+ 1 1) ) Command: (ketto) Command: ketto 2
41
Összehasonlítás 2. Hogyan lehet definiálni egy függvényt ? –(defun drawline ()... ) –(defun drawline (/ pntl pnt2)... ) –(defun drawline (a / pntl pnt2)... ) –(defun C:drawline ()... ) –(defun C:drawline (/ pntl pnt2)... )
42
AutoCAD parancs használata AutoCAD parancsot hajt végre az AutoLISP programból (command argumentumok... ) Az argumentumok lehetnek számok, sztringek vagy pont listák Az üres sztring ”” jelentése: a SPACE vagy az ENTER billentyű lett lenyomva Argumentum nélkül *Cancel* -nek felel meg
43
Magyar AutoCAD parancsok Az AutoCAD parancsok magyarul is megadhatók, de ebben az esetben más AutoCAD alatt (pl. spanyol) nem lehet használni Példa –Rossz: (command ”vonal” ”0,0” ”1,1” ””) –Jó: (command ”_line” ”0,0” ”1,1” ””)
44
AutoCAD parancsok formája linetype : Helyi, lefordított név (vonal) _linetype : Nyelv független parancs -linetype : Dialógus ablak nélküli.linetype : Nem definiálható felül._linetype, _.linetype : Kombináció
45
AutoCAD parancs példa 1. (defun c:xy () (command ”_line” ”0,0” ”1,0” ””) (command ”_line” ‘(0 0) (list 0 1) ””) )
46
AutoCAD parancs példa 2. Változók, listák is használhatók (defun c:xy ( / origo ) (setq origo ‘(0 0)) (command ”_line” origo ”1,0” ””) (command ”_line” origo (list 0 1) ””) )
47
AutoCAD parancs példa 3. AutoCAD parancs felbontható több lépésre (defun c:xy ( / origo ) (setq origo ‘(0 0)) (command ”_line”) ; vonal rajzolás kezdete (command origo) ; első pont ; bármit lehet csinálni közben, ; kivéve AutoCAD parancsot használni (command ”1,0”) ; második pont (command ””) ; parancs lezárása (command ”_line” origo (list 0 1) ””) )
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.