Differences
This shows you the differences between two versions of the page.
— |
jui:cviko3 [2011/08/16 22:33] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== JUI - 3. cviceni ====== | ||
+ | <code lisp> | ||
+ | ;funkce otoc, ktera otoci poradi prvku v seznamu (bez podseznamu) | ||
+ | ;tj. (1 2 (5 4) 3) -> (3 (5 4) 2 1) | ||
+ | |||
+ | (defun otoc (seznam) | ||
+ | (cond | ||
+ | ( (eq seznam nil) seznam) | ||
+ | (T (cons (car (last seznam)) (otoc (butlast seznam) ) ) ) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | (apply adr_funkce seznam parametru) | ||
+ | ; vola funkci | ||
+ | (apply #'+ '(1 2 3 4)) | ||
+ | ; #'x vraci adresu funkce + | ||
+ | |||
+ | mapcar - pro kazdy prvek seznamu spusti funkci s parametry, vysledky se spoji do seznamu | ||
+ | (mapcar adresa_funkce seznam) | ||
+ | ; prvky seznamu se aplikuji na funkci, vysledek je seznam vysledku | ||
+ | |||
+ | (mapcar #'list '(1 2 3) '(5 6 7) '(7 9 20)) | ||
+ | ; vraci (1 5 7) (2 6 9) (3 7 10) | ||
+ | |||
+ | ;pomoci funkce mapcar definujte funkci PRUMERY, ktera vraci seznam prumeru odpovdajicich si prvku ve dvou seznamech | ||
+ | (defun av(a b) | ||
+ | (/ (+ a b) 2) | ||
+ | ) | ||
+ | |||
+ | (defun prumery (x y) | ||
+ | (mapcar #'av x y) | ||
+ | ) | ||
+ | |||
+ | ;nebo pres nepojmenovanou funkci = "lambda" | ||
+ | (defun prum (x y) | ||
+ | (mapcar #'(lambda (a b) (/(+ a b) 2)) x y) | ||
+ | ) | ||
+ | |||
+ | ;funkce ktera vrati nejvetsi prvek | ||
+ | (defun mx(a b) | ||
+ | (if (> a b) a b) | ||
+ | ) | ||
+ | |||
+ | (Defun maxx (&rest seznam) | ||
+ | (if (eq (cdr seznam) nil) | ||
+ | (car seznam) | ||
+ | (mx (car seznam) (apply #'maxx (cdr seznam))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | |||
+ | (defun maax (x &rest y) | ||
+ | (setf tmp x) | ||
+ | (mapc #'(lambda (z) (if (> z tmp) (setf tmp z))) y) | ||
+ | tmp | ||
+ | ) | ||
+ | </code> |