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.