Differences

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

Link to this comparison view

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