A closer look
Podsumowanie poprzedniej części W tej części spróbujemy popatrzyć bliżej na to, co było omówione w poprzedniej części. Prolog pozwala strukturyzować dane, również rząd wykonania operacji
Składnia W tej części spróbujemy uzupełnić wszystko to, co poznaliśmy wcześniej Prolog jest pobudowany na warunkach, warunkiem może być zmienna, stała albo struktura. Każdy warunek jest zapisywany jako ciąg znaków. Znaki są rozdzielone na kilka podgrup, takie znaki są wiadome, jako „Znaki ASCII”
Stałe W prologu są 2 typy stałych: atomy i numery. Specjalne symbole, które prolog używa, żeby oznaczać pytania ?- lub reguły :- są też atomami. Są 2 typy atomów: zrobione z liter i liczb albo z symboli. Pierwszy zwykle zaczyna się z małych liter. Atomy zrobione z symboli zwykle zawierają tylko symboli. Czasami jest potrzebne tworzenie atomów, które się zaczynają z wielkiej litery albo z cyfry. Jeżeli atom zamknięty w cudzysłowie ’ , to atom może zawierać wszystkie litery w swojej nazwie. I na koniec podkreślenie _ może być wstawione w centrum nazwy atomu, żeby zwiększyć czytelność.
Przykłady Co nie jest atomem?
Numery Numery to inny rodzaj stałych Przykład numerów Litera e w tym ciągu oznacza mnożenie na 10 do potęgi 2, jak w przypadku liczby -2.67e2
Składnia.Zmienne Następny element używany w prologu – zmienna. Nazwa zmiennych zaczyna się z wielkiej litery albo podkreślenia. Długość nazw zmiennych może być dowolna, naprzykład Istnieje też zmienna, która się nazywa anonymous variable. Zapisuje się podkreśleniem. Taką zmienną możemy użyć, kiedy chcemy się dowiedzieć, jaki parametr pasuje do naszej funkcji.
Struktury Trzecim typem określeń są struktury. Struktura to pojedynczy obiekt, który składa się z kilku innych obiektów, nazywanych komponentami, które są pogrupowane razem we wnętrzu jednej struktury. Przykładem struktury w życiu jest zakładka do książki z biblioteki, data kiedy książka została wyprodukowana, gdzie ją można znaleźć w bibliotece i tak dalej. Struktury są przydatne, kiedy jest wspólny obiekt, z którego wszyscy korzystają. Na przykład oznaczamy, że John ma książkę
A teraz widzimy, że mary również ma tę samą książkę, którą ma John, bo ona ma taką samą nazwę Obiekty określane są tylko za pomocą ich imion. Na przykład Dodaliśmy więcej informacji na temat książek, które mają John i Mary za pomocą innych stałych, ale przy napisaniu większej programy może okazać się, że po prostu nie będzie wiadomo co oznaczają te lub inne stałe. W takim przypadku powinniśmy użyć struktury. Do struktury jest wpisywany funktor i jego komponenty. Komponenty znajdują się w nawiasach i są rozdzielone przycinkiem. Biorąc pod uwagę ten fakt, że John ma książkę z nazwą Wuthering Heights, autorstwa Emily Bronte mamy
Wewnątrz owns mamy strukturę z tytułem książki i autorem Wewnątrz owns mamy strukturę z tytułem książki i autorem. Tak, jak struktura znajduje się wewnątrz faktu, jak jeden z jego argumentów, to ona zachowuje siebie jako objekt, biorąc udział w związku. Jeżeli chcemy, to możemy również dodać kolejną strukturę z nazwą i nazwiskiem autora Struktury mogą uczestniczyć w procesie pytań-odpowiedzi, za pomocą zmiennych. Na przykład, jeśli chcemy się dowiedzieć czy John ma jaką kolwiek książkę Bronte
Jeśli okaże się, że w kodzie istnieje podobny zapis to jako X prolog wyświetli tytuł książki a jako Y imię pisarza. Albo możemy po prostu użyć anonimowe zmienne Możemy też modernizować strukturę, dodając kolejny argument, który pokazuje jaką kopię książki mamy. Teraz wiemy, że mamy 3129 kopii książki
Symbole Nazwy stałych i zmiennych są budowane za pomocą ciągów znaków. W prologu wszystkie typy nazw(atom,integer albo variable) mają reguły odnośnie wykorzystanych symbolów. Ale również jeden symbol może być tak samo rozpoznany jako przedmiot z danymi Prolog rozróżnia dwa typy symbolów: drukowane i nie drukowane Drukowane pojawiają się na konsoli komputera, nie drukowane – nie ale wykonują jakąś funkcję odnośnie redagowania tekstu, jak początek nowego wiersza albo uruchamianie sygnału. Drukowane symbole już były omówione jako ASCII ciąg Symbole mogą brać udział w drukowaniu, odczytaniu z klawiatury, porównywaniu i matematycznych operacjach
Operatory Czasami jest wygodnie napisać jakieś funkcji jako operatory. Operatory są formą składni, która pomoga w przeczytaniu struktur. Naprzykład arytmetyczne operatory często są używane jako operatory. Jak piszemy wyrażenie „x+y * z” wywołujemy operatory sumowania i mnożenia. Jakby chcielibyśmy napisać wyrażenie za pomocą struktur, to musielibyśmy napisać +(x,*(y,z)) . Arytmetyczne operatory są łatwiejsze do korzystania ale tylko dlatego, że używamy ich z dzieciństwa
Trzeba też rozumieć, że w prologu 3+4 nie oznacza to samo, co i 7. 3+4 jest innym sposobem na napisanie struktury +(3,4) Teraz spróbujemy zrozumieć, jak czytać arytmetyczne wyrażenia, które mają operatory wewnątrz. Żeby to zrobić potrzebujemy 3 rzeczy: pozycja, precedens, asocjatywność. Głównie będziemy używać atomy +,-,* i / Operatory +,-,* i / są zapisywane przed ich argumentami, ich nazywamy infix operatorami. Również możliwe napisanie operatorów jako „-x + y”
Jeśli chcemy zapisać silnię, to piszemy tak „x Jeśli chcemy zapisać silnię, to piszemy tak „x!”, operator wykorzystany tu nazywamy postfix operatorem W następnej części prezentacji będą omówione infix operatory Kiedy widzimy wyrażenie „x+y*z”, to my znamy, że najpierw robimy operację mnożenia a potem sumowania. Znamy, bo dowiedzieliśmy się o tym w szkole Z innej strony żeby być pewnym można użyć strukturę +(x,*(y,z)) Czyli, jak wykorzystamy operatory potrzebujemy reguły, które zadają kolejność wykonania operacji. Innymi słowy precedens
Precedens operatora pokazuje, jaka operacja powinna odbywać się pierwszą. Każdy operator, używany w Prologu ma klasę precedensu związaną z nim Jak widzimy wyrażenie „8/2/2” nie wiemy czy oznacza ono (8/2)/2 czy 8/(2/2) W naszym przypadku wyrażenie będzie wyliczone jako (8/2)/2, bo operator / ma lewą asocjację, również 5+8/2/2 będzie przeczytane jako 5+((8/2)/2)
Równość i Unifikacja Operator równości w prologu wygląda tak, jak i w innych językach Jeżeli wcześniej nie zdefiniowaliśmy nigdzie x i y to x zawsze będzie równy y Również za pomocą operatora można przydzielić wartość do zmiennej X Liczby i atomy są zawsze równe siebie
Taki przykład też jest poprawny i jego wynikiem będzie to, że X będzie mieć wartość bicycle Struktury mogą być zagnieżdżone jedna wewnątrz drugiej. Naprzykład Skończy się z napisem TRUE, B otrzyma wartość b, C wartość c i tak dalej.
W następnym przykładzie cel X=Y skończy się pomyślnie, jeżeli argument nie był utworzony Można zrobić następujące zadania jako ćwiczenia
Arytmetyka W prologu istnieją następujące arytmetyczne operatory Zauważcie, że w prologu operator less than or equal to różni się od tego, co mamy w innych językach. Atom <= jest wykorzystany w innych celach.
Przypuśmy, że mamy bazę danych, która zawiera nazwiska książąt i lata ich panowania I teraz chcielibyśmy się dowiedzieć kto z książąt panował w jakimś określonym roku
Sformujemy warunek Tłumacząc na język prologa otrzymujemy I teraz możemy sprawdzić następujące zapytania
Następujący przykład pokazuje jak można wyliczyć gęstość państwa znając rozmiar populacji i zależność ludności do powierzchni. Struktura pop zawiera nazwę kraju i ilość ludzi w milionach Teraz spróbujemy zdefiniować problem za pomocą prologu Operator is przypisuje wartość po wykonaniu wyrażenia
Teraz spróbujemy sprawdzić działanie napisanej funkcji W pierwszym przypadku otrzymaliśmy 200, co oznacza, że gęstość w Chinach to 200 ludzi na milę kwadratową, w przypadku Turcji nie otrzymaliśmy wyników, bo Turcji niema w naszej bazie danych Zresztą najczęściej używanymi są następujące operatory
Podsumowanie Prolog zawsze próbuje spełnić cel liniowo, czyli z lewa w prawo.
Na obrazku widać jak prolog procesuje wpisane wiersze
Na obrazku niżej cały proces jest pokazywany dokładniej
Jeżeli jeden z warunków był nieudany, to prolog wraca się do poprzedniego wyrazu
Podsumując wrócimy do sumowania Wpisując nie otrzymamy 5 a tylko zmienimy wartości X i Y na 2 i 3, jeżeli na prawdę chcemy otrzymać sumę, to musimy wykorzystać „is”