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

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

JUI - 10. přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.

Podobné prezentace


Prezentace na téma: "JUI - 10. přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc."— Transkript prezentace:

1 JUI - 10. přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz

2 2 Vstup a výstup Systém předpokládá existenci aktuálního vstupního souboru (standardně klávesnice) a aktuálního výstupního souboru (standardně obrazovka terminálu). Při provádění základních operací vstupu a výstupu není třeba explicitně specifikovat, o jaké zařízení (soubor) se jedná. Základní operace vstupu a výstupu předpokládají sekvenční způsob přístupu k datům souborů. Soubory mají standardní textový charakter. Pokud mají zpracovávaná data tvar vyhovující syntaxi termů, používají se pro jejich vstup a výstup standardní predikáty read a write. Jestliže je třeba vycházet z obecněji strukturovaných dat, pak jsou k dispozici standardní predikáty get, get0 a put pro vstup a výstup znaků.

3 3 Přesměrování vstupu see(Jméno_souboru) Tento predikát se splní, je-li daným jménem určen existující soubor. V tom případě je vedlejším efektem otevření příslušného souboru a přesměrování vstupu na tento soubor. Klávesnice má pro účely této identifikace stanoveno dohodnuté jméno user. seeing(F) Vyhodnocením tohoto cíle se proměnná F nastaví na jméno aktuálního vstupního souboru. seen Tento predikát způsobí zavření aktuálního vstupního souboru a přepnutí vstupu na standardní vstupní soubor.

4 4 Přesměrování výstupu tell(Jméno_souboru) Tento predikát přesměruje výstup na určený výstupní soubor. Obrazovka má pro účely této identifikace stanoveno dohodnuté jméno user. telling(F) Vyhodnocením tohoto cíle se proměnná F nastaví na jméno aktuálního výstupního souboru. told Tento predikát způsobí uzavření aktuálního výstupního souboru a přepnutí výstupu na standardní výstupní soubor.

5 5 Vstup termů read(X) Tento predikát způsobí načtení dalšího termu z aktuálního vstupního souboru (každý term zde musí být zakončen tečkou a mezerou nebo přechodem na nový řádek). Přečtený term se pak unifikuje s argumentem X a pokud je jím nenastavená proměnná, provede se nastavení X na právě přečtený term. Pokud unifikace nebyla úspěšná, cíl read(X) selže a to způsobí zpětný návrat a požadavek na splnění předchozího cíle, neboť read samotný je deterministický predikát a pro každé vyhodnocení poskytuje jen jedno řešení nebo selhání. Speciální situace nastane, pokud se při pokusu o vstup termu dosáhlo konce vstupního souboru – v takovém případě se proměnná X nastaví na hodnotu end_of_file.

6 6 Výstup termů write(X) Tento predikát způsobí výstup termu X na aktuální výstupní soubor. Term se zobrazí ve standardní podobě odpovídající syntaktické definici termů. Pro ovládání tvaru výstupu jsou k dispozici následující predikáty: tab(N) provede zápis N mezer nl způsobí přechod na nový řádek

7 7 Vstup a výstup znaků get0(C) Provede se vstup jednoho znaku z aktuálního vstupního souboru přičemž proměnná C se nastaví na číselnou hodnotu ASCII kódu přečteného znaku. get(C) Vyhodnocením tohoto predikátu se čtecí pozice ve vstupním souboru posune až za první tisknutelný znak a číselná hodnota ASCII kódu tohoto znaku se stane hodnotou proměnné C. put(C) Do aktuálního výstupního souboru se provede záznam znaku, jehož ASCII kód má číselnou hodnotu C.

8 8 Cykly řízené selháním Iterativní operace je možné v Prologu provádět prostřednictvím koncové rekurze. Prolog má ale pro vyjádření iterace ještě další možnost, která se podobá repeat-until cyklu v imperativním programování. Opakování se v těchto cyklech vyvolává selháním a jsou užitečné pouze ve spojení s predikáty, které mají nějaký vedlejší účinek. Příklad: Nalezení všech možných řešení zadaného cíle. vsechna_reseni(C,X):- call(C),write(X),nl,fail. vsechna_reseni(C,X). Proměnná X se musí vyskytovat v cíli C.

9 9 Predikát repeat Predikát repeat je při volání okamžitě splněn a je také vždy splněn při navracení. Tento predikát se chová tak, jako by byl definován programem repeat. repeat:-repeat. Cyklus s podmínkou: repeat,C 1,C 2, …,C n,Podm,!. kde C 1, C 2, …, C n jsou cíle, které se mají splnit a Podm je podmínka ukončení cyklu.


Stáhnout ppt "JUI - 10. přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc."

Podobné prezentace


Reklamy Google