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

Podobne dokumenty