====== JUI - 7. cviceni ====== ;;makra ; jmeno, parametry -> dosadi parametry ; makro vypocita vysledek, ktery je kod (vyraz) ; vysledek se vrati a potom se spusti a vysledek spusteni je celkovy vysledek (defmacro set-3 (x) (list 'setf x 3)) ;;alternativa s `, kde se nevyhodnocuje vyraz, ale dela se z toho ten seznam (defmacro set-3 (x) `(setf ,x 3)) ;;` zabrani vypoctu, "," zase vyhodnoti a dosadi\ ; @ expanduje seznam na jednotlive prvky (set-3 3) ;definujte makro, ktere zjisti vypis expandovaneho vyrazu, tj. makro vypis ; (vypis vyraz) -> (pprint (macroexpand-1 'vyraz)) (defmacro vypis (vyraz) `(pprint (macroexpand-1 ',vyraz))) (vypis (1 2 3)) ;definujte makro n-krat, ktere n-krat provede sve telo napr (nkrat 5 (princ "x")) (dotimes (a 5) (princ "x")) (defmacro nkrat (n &rest akce) (let ((x (gensym))) `(dotimes (,x ,n) ,@akce)) ) (nkrat 5 (princ "x") (princ "a")) ;vytvorte makro pro novy prikaz for, kde parametry budou (iter promenna, poc hodnota, koncova hodnota, telo) (for (x 2 6) (prin1 x)) (defmacro for ((var start stop) &rest telo) `(do ( (,var ,start (1+ ,var)) ) ((> ,var , stop)) ,@telo)) (for (x 1 2) (prin1 x))