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))
Back to top