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)) | ||
| + | |||
| + | ;; | ||
| + | |||
| + | (defmacro set-3 (x) | ||
| + | `(setf ,x 3)) | ||
| + | ;;` zabrani vypoctu, "," | ||
| + | ; @ expanduje seznam na jednotlive prvky | ||
| + | |||
| + | (set-3 3) | ||
| + | |||
| + | ;definujte makro, ktere zjisti vypis expandovaneho vyrazu, tj. makro vypis | ||
| + | ; (vypis vyraz) -> (pprint (macroexpand-1 ' | ||
| + | |||
| + | (defmacro vypis (vyraz) | ||
| + | `(pprint (macroexpand-1 ', | ||
| + | |||
| + | (vypis (1 2 3)) | ||
| + | |||
| + | ;definujte makro n-krat, ktere n-krat provede sve telo | ||
| + | napr (nkrat 5 (princ " | ||
| + | |||
| + | (dotimes (a 5) (princ " | ||
| + | |||
| + | (defmacro nkrat (n &rest akce) | ||
| + | (let ((x (gensym))) | ||
| + | `(dotimes (,x ,n) ,@akce)) | ||
| + | ) | ||
| + | |||
| + | |||
| + | (nkrat 5 (princ " | ||
| + | |||
| + | ;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)) | ||
| + | ) | ||
| + | | ||
| + | , | ||
| + | (for (x 1 2) (prin1 x)) | ||
| + | </ | ||