Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
notatki:prolog [2025/05/13 22:08] – administrator | notatki:prolog [2025/05/14 09:21] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ====== Prolog ====== | + | ====== Prolog: Podstawy programowania logicznego |
+ | ===== Programy do uruchomienia Prologa ===== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====== Wstęp ====== | ||
+ | |||
+ | Prolog (Programming in Logic) to jeden z najstarszych i najbardziej znanych języków programowania deklaratywnego. Został stworzony w latach 70-tych XX wieku przez Alaina Colmeraura i Phillipa Rousselota. Jest to język, w którym programista opisuje problem w postaci faktów, reguł i zapytań, a system komputerowy samodzielnie wyciąga wnioski i szuka rozwiązań. | ||
+ | |||
+ | ====== Zastosowania Prologa ====== | ||
+ | |||
+ | Prolog jest szeroko stosowany w dziedzinach, | ||
+ | * Sztuczna inteligencja (AI): Prolog jest używany do tworzenia systemów eksperckich, | ||
+ | * Analiza i przetwarzanie języka naturalnego: | ||
+ | * Bazy danych: Prolog może być używany do tworzenia baz danych i systemów wyszukiwania, | ||
+ | * Rozwiązywanie problemów matematycznych: | ||
- | Proste IDE prolog: https:// | ||
- | Trzeba wykonywać jedno zapytanie na raz. | ||
====== Drzewo Genealogiczne ====== | ====== Drzewo Genealogiczne ====== | ||
+ | <WRAP right round tip 50%> | ||
+ | |||
+ | To jest fakt w Prologu, który opisuje relację " | ||
+ | <code prolog> | ||
+ | rodzic(jozef, | ||
+ | </ | ||
+ | Fakty w Prologu są podstawowymi stwierdzeniami, | ||
+ | </ | ||
+ | <WRAP right round tip 50%> | ||
+ | |||
+ | W Prologu '' | ||
+ | |||
+ | Przykład użycia negacji: | ||
+ | <code prolog> | ||
+ | \+ rodzic(jozef, | ||
+ | </ | ||
+ | To zapytanie sprawdza, czy Józef nie jest rodzicem Jacka. Jeśli fakt rodzic(jozef, | ||
+ | |||
+ | Negacja w Prologu działa w następujący sposób: | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Przykłady: | ||
+ | * Jeśli mamy fakt '' | ||
+ | * Jeśli mamy zapytanie '' | ||
+ | |||
+ | </ | ||
+ | |||
Predykaty i reguły: | Predykaty i reguły: | ||
Linia 81: | Linia 124: | ||
wnuk(X,Y) :- dziecko(D, | wnuk(X,Y) :- dziecko(D, | ||
- | rodzeństwo_n(X, | + | rodzeństwo_n(X, |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | rodzeństwo_p(X, | + | rodzeństwo_p(X, |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | rodzeństwo_p(X, | + | rodzeństwo_p(X, |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | rodzeństwo(X, | + | rodzeństwo(X, |
+ | | ||
+ | | ||
siostra(X, | siostra(X, | ||
brat(X,Y) :- rodzeńśtwo(X, | brat(X,Y) :- rodzeńśtwo(X, | ||
- | mąż(X,Y) :- mężczyzna(Y), | + | mąż(X,Y) :- |
- | żona(X,Y) :- kobieta(X), małżeństwo(X, | + | |
+ | | ||
+ | | ||
+ | |||
+ | żona(X,Y) :- | ||
+ | | ||
+ | | ||
+ | | ||
</ | </ | ||
Linia 167: | Linia 235: | ||
====== Zagadka kryminalna ====== | ====== Zagadka kryminalna ====== | ||
+ | <WRAP right round tip 50%> | ||
+ | W Prologu '' | ||
+ | To jest operator porównania, | ||
+ | W tym przypadku: | ||
+ | '' | ||
+ | </ | ||
+ | <WRAP right round tip 50%> | ||
+ | W Prologu '' | ||
+ | W Prologu możesz używać '' | ||
+ | |||
+ | <code prolog> | ||
+ | motyw(X, zazdrość) :- | ||
+ | kobieta(X), | ||
+ | zamordowana(O), | ||
+ | romans(O, M), | ||
+ | romans(X, M), | ||
+ | X \= O. | ||
+ | </ | ||
+ | W przypadku powyższym, zmienna M w regule romans(O, M) jest używana, ponieważ sprawdzamy romans między O a M, ale jeśli w innym przypadku nie chcemy używać jakiejś zmiennej, zapisujemy ją jako '' | ||
+ | <code prolog> | ||
+ | romans(_, _). % przykładowy zapis, który oznacza, że nie zależy nam na wartościach | ||
+ | </ | ||
+ | To mówi Prologowi: „Przyjmij wszystkie możliwe wartości, ale nie będziemy ich używać ani sprawdzać”. | ||
+ | |||
+ | Zatem '' | ||
+ | </ | ||
+ | Predykaty i reguły: | ||
<code prolog> | <code prolog> | ||
% Fakty | % Fakty | ||
Linia 262: | Linia 357: | ||
</ | </ | ||
- | <WRAP right round tip 50%> | + | |
- | W Prologu '' | + | |
- | To jest operator porównania, | + | |
- | W tym przypadku: | + | |
- | '' | + | |
- | </ | + | |