Differences
This shows you the differences between two versions of the page.
— |
jui:cviko6 [2011/08/16 22:33] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== JUI - 6. cviceni ====== | ||
+ | <code lisp> | ||
+ | ;bloky | ||
+ | |||
+ | progn | ||
+ | prog1 | ||
+ | prog1 blok kodu, vraci n-ty vysledek | ||
+ | |||
+ | block - pojmenovany blok | ||
+ | |||
+ | (return hodnota) vraci z bloku | ||
+ | (return-from jmeno-bloku hodnota) | ||
+ | |||
+ | (block prvni | ||
+ | (+ 1 2) | ||
+ | (+ 2 3) | ||
+ | (block druhy | ||
+ | (+ 4 5) | ||
+ | (return-from prvni 10)) | ||
+ | (+ 8 9)) | ||
+ | |||
+ | (defun f () | ||
+ | (format t "test") | ||
+ | (return-from f 1) | ||
+ | (+ 8 9)) | ||
+ | |||
+ | (prog ((x 5) (y 20)) | ||
+ | navesti | ||
+ | (format t "~A ~A ~%" x y) | ||
+ | (decf x) | ||
+ | (if (zerop x) | ||
+ | (return y) | ||
+ | (go navesti))) | ||
+ | |||
+ | |||
+ | ;iteracni cykly | ||
+ | (dolist (var seznam [vysledek]) telo) | ||
+ | |||
+ | (dolist (x '(1 2 3) 'OK) | ||
+ | (format t "~A~%" (* x 2))) | ||
+ | |||
+ | (dotimes (prom pocet [vysledek]) telo) | ||
+ | |||
+ | (dotimes (x 5 'OK) (format t "~a~%" (* x 2))) | ||
+ | |||
+ | (do ((var init update) (var init update) ...) (podminka [vysledek]) telo) | ||
+ | |||
+ | ;do vyhodnocuje vsechny updaty ze starych hodnot z predchozi iterace | ||
+ | ;do* vyhodnocuje sekvencne jednotlive updaty promennych | ||
+ | (do | ||
+ | ((x 1 (+ x 1)) | ||
+ | (y 1 x) | ||
+ | (z 1 y)) | ||
+ | ((> x 5) 'OK) | ||
+ | (format t "~A ~A ~A ~%" x y z) | ||
+ | ) | ||
+ | |||
+ | |||
+ | ;vytvorte funkci se 2 parametry (cislo a seznam cisel | ||
+ | ;Funkce vrati T pouze v pripade, ze jsou rozdily nasledujicich mensi nez x | ||
+ | ;a/ rekurzi | ||
+ | ;b/ iteraci | ||
+ | |||
+ | (defun max-dif (eps x y) | ||
+ | (<= (abs (- x y)) eps)) | ||
+ | |||
+ | (defun dif (cislo seznam) | ||
+ | ;(format t "~A ~A~%" (car seznam) (car(cdr seznam))) | ||
+ | (cond | ||
+ | ((cdr seznam) (and (max-dif cislo (car seznam) (car(cdr seznam))) (dif cislo (cdr seznam)))) | ||
+ | (t t) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | (dif 3 '(1 3 5 6 5)) | ||
+ | (dif-iter 3 '(1 3 5 6 5 8)) | ||
+ | |||
+ | |||
+ | (defun dif-iter (cislo seznam) | ||
+ | (do ((sez seznam (cdr sez))) ((null (cdr sez)) 'DONE) | ||
+ | (if (not (max-dif 3 (car sez) (car(cdr sez)))) (return-from dif-iter nil)) | ||
+ | ) | ||
+ | t) | ||
+ | |||
+ | |||
+ | ;vytvorte funkci se dvema parametry - cislo a seznam cisel | ||
+ | ;funkce vrati seznam, ktery vznikne vlozenim x mezi kazde 2 prvky seznamu | ||
+ | (defun inter (cislo seznam) | ||
+ | (do* ( | ||
+ | (sez seznam (cdr sez)) | ||
+ | (tmp (list(car seznam)) (append tmp (list cislo (car sez)))) | ||
+ | ) | ||
+ | ( (null (cdr sez)) tmp) | ||
+ | t | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | (inter 9 '( 1 2 3 4 5)) | ||
+ | (inter 9 '(1 2)) | ||
+ | </code> |