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))
Back to top