Grafikus tervezőrendszerek programozása 8. előadás
Sztring kezelés 1. Sztringek fontos szerepet játszanak Szinte minden adat konvertálható sztring formátumba Nagybetű, kisbetű konverzió (strcase sztring [melyik]) –Példa: (strcase ”SzTriNG”) -> SZTRING (strcase ”SzTriNG” nil) -> SZTRING (strcase ”SzTriNG” t) -> sztring
Sztring kezelés 2. Sztringek hossza: (strlen sztring) –Példa: (strlen ”Hossz”) -> 5 (strlen ””) -> 0 Sztringek összefűzése: (strcat sz1 sz2 sz3...) –Példa: (strcat ”Szt” ”rin” ”g”) -> ”Sztring” (strcat ”Sztri” ”” ”ng”) -> ”Sztring”
Sztring kezelés 3. Részsztringek készítése: (substr sztring kezdet [hossz]) –Példa: (substr ”sztring” 2) -> ”ztring” (substr ”sztring” 2 2) -> ”zt” (substr ”sztring” 4 4) -> ”ring”
Példa (defun str-list (str / ls i) (setq i 1) (repeat (strlen str) (setq ls (cons (substr str i 1) ls) i (1+ i) ) (reverse ls) ) (str-list "ring") -> ("r" "i" "n" "g")
File megnyitás File megnyitása: (open file-név mód) File leírót ad vissza vagy nil A mód lehet –”r” olvasáshoz –”w” íráshoz Példa: (setq fp (open ”c:/work/t.dat” ”r”))
File lezárása File lezárása: (close file-leíró) nil -t add vissza A file leíró értéke változatlan de értéke használhatatlan
Példa (defun hello-file ( / fp ) (setq fp (open ”c:/hello.dat” ”w”)) (if fp (progn (princ ”Hello World!\n” fp) (close fp) ) nil )
Input Egy karakter beolvasása (read-char [file-leíró]) Egy sor beolvasása (read-line [file-leíró]) File vége esetén mindkét függvény nil -t ad vissza Ha file leíró nincs megadva akkor a billentyűzetről vár inputot
Output Egy karakter kiírása (write-char szám [file-leíró]) a szám az ASCII kód Egy sor kiírása (write-line szöveg [file-leíró]) Egyéb output függvények princ, print, prin1, terpri
findfile File keresése az AutoCAD által megadott könyvtárakban (findfile ”dcg.lsp”) -> ”C:\\peter\\dcg\\dcg.lsp” (findfile ”pp.rr”) -> nil
getfiled File név bekérése a felhasználótól dialógus ablakkal (getfiled title default ext flags) –title : a dialógus ablak neve –default : a kezdő file, directory neve –ext : a keresett file-ok kiterjesztése –flags 1 – új file létrehozására rákérdezzen 4 – tetszőleges file kiterjesztést engedélyez...
Példa
Kiértékelő függvény Az eval függvény kiértékeli az argumentum kifejezést és az eredménnyel tér vissza Az eval függvény az AutoLisp interpreter lelke ! Példa: (setq x ”tt”) (setq y ‘(strcat ”a” ”z”)) (eval x) -> ”tt” (eval y) -> ”az” (eval 9.0) -> 9.0
apply függvény (apply függvény lista) Az első argumentumban megadott függvény -t végrehajtja a listában megadott argumentumokkal A függvény a szükséges számú argumentumot veszi a listából Példa: (apply ’* ’(6 2 3)) -> 36 (apply ’strcat ’(”s” ”o” ”r”)) -> ”sor” (apply ’setq ’(a 5 b 2)) -> 2
mapcar függvény (mapcar függvény lista1 lista2...) Az első argumentumban megadott függvény -t végrehajtja a listák elemeire és visszaadja az eredmény listát! Annyi listát kell megadni ahány argumentum kell a függvénynek! Példa: (mapcar ‘atoi ‘(”11” ”23”)) -> (11 23) (mapcar ‘+ ‘(1 2 3) ‘(4 5 6)) -> (5 7 9)
mapcar példa Több sztring argumentum esetén (princ (strcat ”hello” ”World”)) Változó számú argumentum (defun my-princ (x) (if (listp x) (mapcar 'princ x) (princ x) ) Használat (my-princ (list ”\nKezdo pont:” p1 ”\nVegpont:” p2) )
lambda „függvény” „Ismeretlen” vagy „munka függvény” is definiálható Akkor használjuk ha nem akarunk külön függvényt definiálni Például a programozói akaratot ez a forma jobban kifejezi (lambda argumentumok kifejezések...)
Példa 1. Változat (defun test (x y) (+ x y)) (mapcar ‘test ‘(1 2 3) ‘(4 5 6)) -> (5 7 9) 2. Változat (mapcar ‘(lambda (x y) (+ x y)) ‘(1 2 3) ‘(4 5 6) ) -> (5 7 9) (mapcar ‘(lambda (x) (* x 3)) ‘(5 6 7) ) -> ( )
read (read sztring) A függvény visszadja a sztringből az első atomot vagy listát. Példa (read ”haha”) -> haha (read ”(a)”) -> (a) (eval (read ”(+ 2 3)”)) -> 5
Plotter példa (fplot '(lambda (x y) (* (cos x)(cos y))) )
(defun fplot (expr steps xpi ypi / xn yn zn tlist plist) (setq plist nil xn 0.0 yn 0.0) (repeat (* xpi steps) (setq tlist nil yn 0.0) (repeat (* ypi steps) (setq zn ((eval expr) xn yn)) (setq tlist (append tlist (list (list xn yn zn)))) (setq yn (+ yn (/ pi steps))) ) (setq plist (append plist (list tlist))) (setq xn (+ xn (/ pi steps))) ) (_plot plist) )
Rajzoló (defun _plot (l / i j) (setq i 0) (command "_3dmesh" (length l) (length (car l))) (repeat (length l) (setq j 0) (repeat (length (car l)) (command (nth j (nth i l))) (setq j (1+ j)) ) (setq i (1+ i)) )