Statyczne i dynamiczne predykaty

Transkrypt

Statyczne i dynamiczne predykaty
Statyczne i dynamiczne predykaty
Dynamiczne – dowodzą lub odwołują pewne reguły,
●
Statyczne – nie potrafią tego co dynamiczne,
ponieważ ich punkty zostały zebrane w całość, która
działa szybciej, ale nie jest modyfikowana w czasie
wykonywania.
●
Statyczne i dynamiczne predykaty
●
●
●
Obecnie wszystkie predykaty są statyczne chyba,
że użytkownik uczyni je dynamicznymi.
W pewnych Prologach wszystkie predykaty są
dynamiczne.
W innych predykaty są dynamiczne, jeżeli
użytkownik załaduje klauzule consult lub
reconsult lub statyczne przy załadowaniu ich
podczas kompilacji.
Statyczne i dynamiczne predykaty
Tworzenie dynamicznego predykatu
●
●
Utworzenie go za pomocą funkcji assert
assert(+Term)
Wprowadzenie przez dodanie punktów do
pliku programu, ale poprzedzając je
deklaracją:
:- dynamic(jakis/2).
Statyczne i dynamiczne predykaty
Dynamiczne predykaty mają także inny rezultat.
Informują one system Prolog by 'nie martwił się', jeżeli
spróbujemy zapytać o predykat, który jeszcze nie istnieje.
W wielu przypadkach, zapytanie wygląda następująco:
?- f(a,b).
Oczywiście zapytanie wykaże błąd, jeżeli nie ma żadnych
punktów f/2 w bazie danych.
Jednak gdy zadeklarujemy
:- dynamic(f/2).
Wtedy zapytanie nie zwróci komunikatu błędu.
Statyczne i dynamiczne predykaty
Funkcja abolish, służy do usunięcia predykatu z bazy
danych, także dynamicznej deklaracji, jeśli taka istnieje.
Do usunięcia wszystkich punktów bez wyczyszczenia ich z
dynamicznych deklaracji, powinniśmy wywołać polecenia
podobne do poniższych:
wyczysc_predykat :- retract(f(_,_)), fail.
wyczysc_predykat :- retract (f(_,_) :- _), fail.
wyczysc_predykat.
Oznacza to: odwołanie wszystkich reguł odpowiadających za
f(_,_), a następnie odwołanie wszystkich zaczynających się od
f(_,_) i zakończenie sukcesem bez podejmowania dalszych
akcji.
Predykat consult i reconsult
Zadaniem predykatu consult i
reconsult jest czytanie
(kompilowanie) kodu źródłowego przy
użyciu funkcji read/1 oraz dodanie
każdego termu do bazy danych.
Predykat consult i reconsult
Istnieje jednak pewien wyjątek. Wszystkie
termy zaczynające się od :- są
wykonywane jako zapytania do momentu
napotkania consult/reconsult.
Takie terminy nazywamy EMBEDDED
QUERIES (wbudowanie zapytania).
Operacje otwarcia i zamknięcia
Operacje otwarcia i zamknięcia (see,
tell, seen, told) służą wyłącznie do
przetwarzania plików tekstowych
(sekwencyjnych).
Podczas przetwarzania plików
sekwencyjnych każda operacja
(zapis/odczyt) powoduje automatyczne
przejście do następnej pozycji w pliku.
Operacje otwarcia i zamknięcia
Ogólny schemat przetwarzania pliku
Otwarcie pliku
Odczyt/zapis
Odczyt/zapis
Zamknięcie pliku
}
ciąg operacji
przetwarzania
Operacje otwarcia i zamknięcia
W języku Prolog operacje na plikach opierają się na
koncepcji strumienia
• Program prologowy czyta dane ze strumienia wejściowego i
zapisuje dane do strumienia wyjściowego
• Strumieniem wejściowym i/lub wyjściowym może być
dowolny plik o dostępie sekwencyjnym (tekstowy)
• Terminal użytkownika jest również traktowany jak strumień
• W trakcie wykonywania programu w danej chwili
realizowana może być operacja odczytu i zapisu
odpowiednio z/do jednego strumienia wejściowego i jednego
strumienia wyjściowego
• Domyślnym strumieniem wejściowym i wyjściowym jest
terminal użytkownika
Operacje otwarcia i zamknięcia
Użytkownik
Aktualny
strumień
wejściowy
Plik 1
Plik 2
...
Terminal
użytkownika
Program
Aktualny
strumień
wyjściowy
Plik 3
Plik 4
...
Operacje otwarcia i zamknięcia
Otwieranie plików
Operacja zmiany aktualnego strumienia
wejściowego
see(<nazwa_pliku>)
Jeżeli plik jest już otwarty to nadal
pozostanie w trybie odczytu
(nie będzie błędu!)
Operacje otwarcia i zamknięcia
Otwieranie plików
Operacja zmiany aktualnego strumienia
wyjściowego
tell(<nazwa_pliku>)
Jeżeli plik jest już otwarty to nadal
pozostanie w trybie zapisu
(nie będzie błędu!)
Operacje otwarcia i zamknięcia
Zamykanie plików
Operacja zamknięcia aktualnego strumienia
wejściowego
seen
Predykat ten jest zawsze spełniony. Po
wykonaniu strumieniem wejściowym
zostaje terminal.
Operacje otwarcia i zamknięcia
Zamykanie plików
Operacja zamknięcia aktualnego strumienia
wyjściowego
told
Predykat ten jest zawsze spełniony. Po
wykonaniu strumieniem wyjściowym
zostaje terminal.

Podobne dokumenty