Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.

Podobné prezentace


Prezentace na téma: "JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc."— Transkript prezentace:

1 JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.

2 2 Funkce pro zpracování seznamů append spojování seznamů list konstrukce seznamů last zjištění posledního prvku seznamu length délka seznamu reverse otočení seznamu

3 3 Funkce append a list append Funkce append může mít proměnný počet argumentů. Hodnotami argumentů musejí být seznamy a výsledkem je seznam vzniklý spojením těchto seznamů. Při provedení funkce append se tolikrát provede primitivní konstruktor cons, kolik činí součet délek seznamů ve všech argumentech kromě posledního. list Funkce list může mít rovněž proměnný počet argumentů, ale jejich hodnotami mohou být libovolné S-výrazy. Výsledkem je seznam vzniklý spojením těchto S-výrazů. Za jedním provedením funkce list je schováno tolik aplikací primitivního konstruktoru cons, kolik má list argumentů.

4 4 Funkce last, length a reverse last Funkce last má jeden argument, jehož hodnotou musí být seznam. Výsledkem je seznam obsahující pouze poslední prvek seznamu v argumentu. length Funkce length má jeden argument, jehož hodnotou musí být seznam. Výsledkem je počet prvků na nejvyšší úrovni seznamu v argumentu. reverse Funkce reverse má jeden argument, jehož hodnotou musí být seznam. Výsledkem je obrácený seznam, přičemž obracení se týká pouze nejvyšší úrovně seznamu a nižší vrstvy zůstávají nedotčeny.

5 5 Predikátové funkce equal test na shodu S-výrazů null test na prázdný seznam member test na členství v seznamu listp numberp typové predikáty symbolp boundp test na vazbu proměnné zerop test na nulu plusp test na kladnou hodnotu minusp test na zápornou hodnotu and, or, not logické operace

6 6 Predikáty equal, null a member equal Funkce equal má dva argumenty, jejichž hodnotami mohou být libovolné S-výrazy. Pokud jsou shodné, výsledkem je T, v opačném případě je výsledkem nil. null Funkce null má jeden argument, jehož hodnotou by měl být seznam. Pokud je tento seznam prázdný, výsledkem je T, v opačném případě je výsledkem nil. member Funkce member má dva argumenty. Hodnotou prvého je libovolný S- výraz a a hodnotou druhého musí být seznam. Funkce testuje existenci S-výrazu na nejvyšší úrovni seznamu. V případě úspěchu vrací ne hodnotu T, ale přímo tu část seznamu, kde tento S-výraz nalezla. Při neúspěchu vrací samozřejmě nil.

7 7 Typové predikáty a boundp listp Funkce listp má jeden argument. Tato funkce testuje, zda hodnotou argumentu je seznam. numberp Funkce numberp má jeden argument a testuje, zda hodnotou tohoto argumentu je číslo. symbolp Funkce symbolp má jeden argument a testuje, zda jeho hodnotou je symbol. boundp Funkce boundp má jeden argument, jehož hodnotou by měl být symbolický atom. Pokud je na tento atom navázána hodnota, funkce vrací T, jinak vrací nil.

8 8 Predikáty pro porovnávání s nulou zerop Funkce zerop má jeden argument, jehož hodnotou by mělo být číslo. Tato funkce testuje, zda hodnota argumentu je rovna nule. plusp Funkce plusp má jeden argument, jehož hodnotou by mělo být číslo. Tato funkce testuje, zda hodnota argumentu je kladná. minusp Funkce minusp má jeden argument, jehož hodnotou by mělo být číslo. Tato funkce testuje, zda hodnota argumentu je záporná.

9 9 Predikát not Tato funkce je pouze synonymem pro predikát null. Je však doporučeno ji používat jako zdůraznění, že se nejedná o testování konce seznamu, ale o logickou negaci (v lispovském pojetí). Platí (not nil)=> T (not x)=> nil pro x  nil

10 10 Predikáty and a or Predikáty and a or jsou speciální funkce zajišťující výpočet logického součinu a logického součtu svých argumentů v lispovské interpretaci. and Vyhodnocuje své argumenty tak dlouho, až narazí na prvý s hodnotou ni1 a pak vrátí nil. Jinak vyhodnotí všechny argumenty a vrací hodnotu posledního. or Vyhodnocuje své argumenty tak dlouho, až narazí na prvý s hodnotou různou od ni1 a jeho hodnotu pak vrátí jako výsledek. Jinak vyhodnotí všechny argumenty a vrátí nil. Z popisu je vidět, že tyto speciální funkce vyhodnotí vždy jen tolik argumentů, kolik je zapotřebí k určení výsledku.

11 11 Vyhodnocovací funkce eval základ vyhodnocovacího systému apply aplikace funkcí funcall aplikace funkcí

12 12 Funkce eval Funkce eval je základem vyhodnocovacího systému. Je to funkce jediného argumentu a pokud ji použijeme v explicitním volání, dojde vlastně ke dvojímu vyhodnocení tohoto argumentu: poprvé se vyhodnotí jako argument kterékoliv jiné funkce, získaná hodnota se pak předá funkci eval a ta jej vyhodnotí znovu! Hodnota argumentu funkce eval musí mít jeden z těchto tvarů:  číselný atom – eval vrátí totéž číslo  symbolický atom – eval vrátí hodnotu vázanou na toto jméno  seznam tvaru (f a l a 2... a n ), kde f je jméno funkce a každé a j lze opět vyhodnotit Prostřednictvím funkce eval dostáváme velmi mocný prostředek: můžeme dynamicky vytvořit určitou část programu a takto vytvořenou část bezprostředně jako program vyhodnotit.

13 13 Funkce apply Při vyhodnocení zápisu funkce v Lispu se standardně vyhodnotí její argumenty, z jejích hodnot se udělá seznam a ten se předá k aplikaci. Ta část vyhodnocovacího systému, která aplikaci funkce provádí, je v Lispu k dispozici prostřednictvím funkce apply. Funkce apply má dva argumenty. Hodnotou prvého argumentu musí být jméno funkce a hodnotou druhého musí být seznam hodnot jejích argumentů. Platí vztah (apply ’fce ’(val 1 val 2 … val n )) = (fce arg 1 arg 2 … arg n ) kde val i je hodnota argumentu arg i.

14 14 Funkce funcall (funcall farg arg1 … argN) Tímto zápisem se zajistí aplikace funkce, která je hodnotou výrazu farg, na hodnoty argumentů vypočtené jako hodnoty výrazů arg1, …, argN.


Stáhnout ppt "JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc."

Podobné prezentace


Reklamy Google