Symbolické programovanie a LISP, zima 2000/2001

(vychádza z prednášky Funkcionálne programovanie, Ivan Kalaš)
Petrovič Pavol, Ústav Informatiky, č.d. 15
e-mail: ppetrovi@dent.ii.fmph.uniba.sk
www k prednáške: http://www.ii.fmph.uniba.sk/vyuka/lisp

4.prednáška

map, apply

(map <f> <zoz>)
map
aplikuje funkciu <f> na každý prvok zoznamu <zoz> a vráti zoznam výsledkov týchto aplikácií

(apply <f> <zoz>)
apply aplikuje funkciu <f> s parametrami zo zoznamu <zoz>

[] (map 1+ '(1 2 3 4)) (2 3 4 5)
[] (apply + '(1 2)) 3

sequence

(sequence <S-exp1> <S-exp2> ... <S-expn>)
sequence postupne vyhodnotí S-výrazy <S-exp1>, <S-exp2>, ... <S-expn> a ako výsledok vráti hodnotu posledného S-výrazu <S-expn>

Niektoré funkcie použitie sequence pri postupnosti S-výrazov vyžadujú (napr. if), iné funkcie (napr. define, cond, lambda, let) pracujú s postupnosťou S-výrazov už z definície (použitie funkcie sequence však chybu nespôsobí).

príklad

vypis

Funkcia vypis vypíše ľubovoľný S-výraz (atóm, vlastný zoznam, nevlastný (bodkový)).


množiny

interface:

reprezentácie:


slovník

Funkcia careful-car (resp. careful-cdr) sa správa rovnako ako car (resp. cdr) s jedinou výnimkou:

[] (careful-car '()) ()
[] (careful-cdr '()) ()

Funkcia assoc-car (resp. assoc-cdr) hľadá v zozname dvojíc tú, ktorej prvou (resp. druhou) zložkou je hľadaný prvok.

[] (assoc-car 2 '((1 . 2) (2 . 3) (3 . 4))) (2 . 3)
[] (assoc-car 2 '((1 . 2) (2 . 3) (3 . 4))) (1 . 2)

 

[] (define sl->eng (generate '())) sl->eng
[] (define sl->eng ((sl->eng 'learn) 'dva 'two)) sl->eng
[] ((sl->eng 'translate) 'dva) two
[] ((sl->eng 'translate<-) 'two) dva

 

Last Updated on 19-Oct-2000
By Petrovic Pavol
E-mail: ppetrovi@dent.ii.fmph.uniba.sk