====== JUI - 6. cviceni ====== ;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))