no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


jui:cviko7 [2011/08/16 20:33] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== JUI - 7. cviceni ======
 +<code lisp>
 +;;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))
 +</code>
  
jui/cviko7.txt · Last modified: 2011/08/16 20:33 by 127.0.0.1
Back to top
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0