Prolog Język deklaratywny. Programowanie proceduralne.
Transkrypt
Prolog Język deklaratywny. Programowanie proceduralne.
Prolog Język deklaratywny. Programowanie proceduralne. Output write – wbudowany predykat przyjmujący term jako argument i wyświetlający go na ekranie writeq – wyświetla również znak ‘ nl – wbudowany, bezargumentowy predykat, powodujący przejście do nowej linii ?- write(‘Pierwsza linia’), nl, writeq(‘Druga linia’). Output diplay – predykat wyświetlający fuktory przed argumentami, przydatny do sprawdzania wewnętrznej reprezentacji term ?- display(2+2). Obliczanie a wyświetlanie Należy rozróżnić zapytania, które wyświetlają dane, od takich ktore tylko dokonują obliczeń. Na przykład: ?- capital_of(georgia, City). Nie wyświetla danych na ekran, robi to środowisko programosityczne. Z kolei: ?- capital_of(georgia, City), write(City). wyświetla dane. Predykat fail ?- capital_of(State,City),write(City), write(' is the capital of '),write(State),nl. Wyświetli pierwszy znaleziony wynik. Środowisko będzie czekać na informację od użytkownika czy ma wyświetlać kolejne wyniki czy zakończyć. Aby wyświetlić wszystkie wyniki możemy skorzystać z predykatu fail: ?- capital_of(State,City),write(City), write(' is the capital of '),write(State),nl,fail. Predykat fail Dlaczego wyświetlane są wszystkie wyniki? Predykaty jako podprogramy print_capitals :- capital_of(State,City), write(City), write('is the capital of '), write(State), nl, fail. Zapytanie: ?- print_capitals. Wyświetli wszystkie znane stolice stanów. Predykaty jako podprogramy Inne przykłady podprogramów. Read - wczytanie term Read – wbudowany, jednoargumentowy predykat przypisujący argumentowi term wpisany z klawiatury, np. ?- read(X). hello. (typed by user) X = hello yes Inne przykłady; interaktywny program. Modyfikacja bazy danych Assert (asserta, assertz) – dodaje klauzule definiujące predykaty odpowiednio na początku (asserta) i na końcu (assertz) zestawu klauzul danego predykatu. ?- asserta(capital_of(hawaii,honolulu)). Modyfikacja bazy danych Retract – usuwa podany jako argument predykat z bazy danych ?- retract(capital_of(georgia,atlanta)). Modyfikacja bazy danych Listing – listuje predykaty. ?- listing ?- listing(capital_of/2). Abolish – usuwa wszystkie klauzule dla predykatu podanego na wejściu. ?- abolish(capital_of/2). Statyczne i dynamiczne predykaty Operacje na plikach See – predykat otwiera plik do odczytu Seen – zamyka wszystkie otwarte pliki ?- see('aaa'), read(X1), see('bbb'), read(X2), see(user), read(X3), see('aaa'), read(X4), seen. % read first term from AAA % read first term from BBB % read a term from the keyboard % read second term from AAA % close all input files Operacje na plikach Tell – predykat otwiera plik do zapisu ?- tell('aaa'), write('First line of AAA'),nl, tell('bbb'), write('First line of BBB'),nl, tell(user), write('This goes on the screen'),nl, tell('aaa'), write('Second line of AAA'),nl, told. Uczące się programy