You are not allowed to perform this action

Table of Contents

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))
jui/cviko7.txt · Last modified: 2011/08/16 22:33 (external edit)
Back to top
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0