aplikuje funkci na stejnolehlé prvky seznamů a vr

Transkript

aplikuje funkci na stejnolehlé prvky seznamů a vr
Lisp 4-1
Mapovací funkcionály - vyjádření určitého způsobu iterace
- aplikuje funkci na stejnolehlé prvky seznamů a vrací seznam výsledků
(mapcar
funkce
seznam1
seznam2 ...)
- aplikuje funkci na stejnolehlé prvky seznamů a vrací triviální hodnotu
(mapc
funkce
seznam1
seznam2 ...)
-aplikuje funkci na celé seznamy, pak na jejich zbytky, atd. a vrací seznam výsledků
(maplist
funkce
seznam1
seznam2 ...)
-aplikuje funkci na celé seznamy, pak na jejich zbytky, atd. a vrací triviální hodnotu
(map
funkce
seznam1
seznam2 ...)
- pracuje jako mapcar ale vrací seznam vniklý jako append dílčích výsledků
(mapcan
funkce
seznam1
seznam2 ...)
- pracuje jako maplist ale vrací seznam vniklý jako append dílčích výsledků
(mapcon
funkce
seznam1
seznam2 ...)
(mapcar 'list '(a b c) '(d e f) '(g h i)) -> ((a d g) (b e h) (c f i))
(maplist 'list '(a b c) '(d e f) '(g h i)) -> (((a b c) (d e f) (g h i)) ((b c) (e f) (h i)) ((c) (f) (i)))
(mapcan 'list '(a b c) '(d e f) '(g h i)) -> (a d g b e h c f i)
(mapcon 'list '(a b c) '(d e f) '(g h i)) -> ((a b c) (d e f) (g h i) (b c) (e f) (h i) (c) (f) (i))
Seznam druhých mocnin:
(defun mocnina(x) (* x x))
(defun mocnina-list(s)
(mapcar 'mocnina s))
příklad: (mocnina-list '(1 2 3)) -> (1 4 9)
Součet seznamů:
(defun suma(x y z) (+ x y z))
(defun suma-list(a b c)
(mapcar 'suma a b c))
příklad: (suma-list '(1 2 3) '(4 5 6) '(7 8 9)) -> (12 15 18)
Anonymní funkce - Lambda
prostředek pro zvýšení abstrakce
Seznam druhých mocnin:
(defun mocnina2-list(s)
(mapcar '(lambda (n) (* n n)) s))
příklad: (mocnina2-list '(1 2 3 )) -> (1 4 9)
Součet seznamů:
(defun suma2-list (a b c)
(mapcar #'(lambda (x y z) (+ x y z)) a b c))
příklad: (suma2-list '(1 2 3) '(4 5 6) '(7 8 9)) -> (12 15 18)
Lisp 4-2
Vyhodnocování
(eval výraz)
- funkce eval je základ celého vyhodnocovacího systému Lispu
(setq x '(1 2))
(setq y '(3 4))
(setq xy '(x y))
(cons 'append xy) -> (append x y) ;vytvořili jsme výraz, který lze vyhodnotit
(eval (cons 'append xy)) -> (1 2 3 4)
(apply funkce (value1 value2 ....)
- část vyhodnocovacího systému Lispu
- při vyhodnocení zápisu funkce se standardně vyhodnotí její argumenty, z jejich hodnost se
udělá seznam a ten se předává k aplikaci
(funkce arg1 arg2 ...) => (apply funkce (value1 value2 ...))
(apply '+ '(1 2 3 4 5)) -> 15
(apply 'list '(a b c)) -> (a b c)
(funcall funkce arg1 arg2 ...)
- obdobné jako apply, ale navíc zde dojde ještě k vyhodnocení argumentů
- použití - když jméno funkce, kterou chceme volat dostáváme jako parametr
(defun operace (fce a b) (list (funcall fce a b)))
(operace '+ '1 '2) -> (3)
(operace '- '1 '2) -> (-1)
Member, který vrací t/nil:
(defun my_member(a s)
(eval (cons 'or (mapcar '(lambda (x) (equal a x)) s)))))
příklad: (my_member 'a '(b d a)) -> t
Test na podmnožinu:
(defun podmnžina (a b)
(eval (cons 'and
(mapcar '(lambda (x) (my_member x b)) a)
)))
příklad: (podmnozina '(a b) '(f b s a r)) -> t
Lisp 4-3
Počet atomů ve víceúrovňovém seznamu:
(defun atomcount(s)
(cond ((null s) 0)
((atom s) 1)
(t (apply '+ (mapcar '(lambda (x) (atomcount x)) s)))
; na každý prvek seznamu zavoláme lambda funkci
))
příklad: (atomcount '((a (b c)) d ((e) f g) h)) -> 8
(defun atomcount2(s)
(cond ((null s) 0)
((atom s) 1)
(t (apply '+ (mapcar 'atomcount2 s)))
; na každý prvek seznamu zavoláme atomcount2
))
příklad: (atomcount2 '((a (b c)) d ((e) f g) h)) -> 8

Podobné dokumenty

LISP - Funkcionály

LISP - Funkcionály Vyhodnocení formy FUNCTION vrací hodnotu funkční vazby symbolu „jméno fce“ (u vestavěných kompilovaných funkcí adresu kódu funce, u ostatních lambda výraz z definice funkce). (FUNCTION je komplemen...

Více

2. Jazyk Lisp - Ústav automatizace a informatiky

2. Jazyk Lisp - Ústav automatizace a informatiky Pozn.: platí konvence, že jakákoli hodnota různá od NIL vyjadřuje pravdivostní hodnotu true. Zápis funkce

Více

LISP - KIV

LISP - KIV Pokud má x více než jeden prvek, dej do výsledku druhý prvek (tj car z cdr x) s výsledkem rekurzivně vyvolané fce sude s argumentem, kterým je zbytek ze zbytku x (tj cdr z cdr x, tj část x od tretí...

Více

volitelné parametry jsou nastaveny na nil, pokud nejsou při

volitelné parametry jsou nastaveny na nil, pokud nejsou při (defun zeta (a &key b (c pepa) d (e 300)) (list a b c d e)) (zeta 1 :d 800 :e 400) -> (1 nil pepa 800 400) Volitelný počet parametrů (&rest): - nutné pro funkce s volitelným počtem parametrů, jako ...

Více

ZXM 91_02 - ZX Magazín

ZXM 91_02 - ZX Magazín VÁŽENÍ, aneb ú v o d n í k , na s t r a n ě 3; p r o g r a m á t o r s k é FINTY jsou na s t r a n ě .4; ČESKÝ OBVOD ULA PRO ZXS na s t r a n ě 5; TISKÁRNA DCD-PRT 80 na s t r a n ě 5; a s s e m b...

Více

Programován´ı v C++ Prvn´ı kroky

Programován´ı v C++ Prvn´ı kroky typedef struct { s t r i n g jmeno ; string prijmeni ; int vek ; } TClovek ; Toto je základnı́ způsob definovánı́ struktury. Struktura nenı́ nic jiného než soubor proměnných, které majı́ ne...

Více

Programování PLC podle normy IEC 61 131

Programování PLC podle normy IEC 61 131 Oblast působnosti proměnných je běžně omezena pouze na tu programovou organizační jednotku, ve které byly deklarovány (proměnné jsou v ní lokální). To znamená, že jejich jména mohou být používána v...

Více

190B7CS/00 Philips LCD monitor

190B7CS/00 Philips LCD monitor Monitory Philips Vista-ready jsou připraveny zobrazit nový, vizuálně propracovaný operační systém Windows, který je určen ke zkvalitnění vaší zábavy, zvýšení produktivity a k lepšímu ovládání práce...

Více