Lab 12 - Przemysław Juszczuk

Transkrypt

Lab 12 - Przemysław Juszczuk
Języki programowania deklaratywnego
dr Przemysław Juszczuk
Katedra Inżynierii Wiedzy
laborki 14
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Języki deklaratywne
Główne różnice między paradygmatem deklaratywnym a
imperatywnym
Omów główne cechy paradygmatu programowania w logice na
przykładzie Prologa
Główne zastosowania języka Prolog
Co to jest obiekt w Prologu i czym się różni od obiektu w języku C
(lub innym obiektowym)
Termy w Prologu
Klauzule i zapytania w Prologu
Reguły w Prologu (omów na przykładzie)
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Języki deklaratywne
Co to jest unifikacja w Prologu
Omów spełnienie celu w Prologu
Omów mechanizm rezolucji w Prologu
Co to jest odcięcie i do czego można wykorzystać
Omów rekurencję w Prologu (przedstaw przykład)
Listy w Prologu
Omów rekurencję na listach w Prologu (przedstaw przykład)
Predykaty wbudowane w Prologu – wymień przykładowe i omów ich
działanie
Omów główne cechy paradygmatu funkcyjnego oraz wymień
koncepcje języków funkcyjnych
Co to są funkcje czyste
Główne obszary zastosowań dla języków funkcyjnych
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Języki deklaratywne
Jakie paradygmaty wspiera język F ]
Listy w F ]
Wyrażenia lambda w C ]
Zapis wiedzy w systemie PC Shell (omów poszczególne bloki)
Składnia reguł w systemie PC-Shell (omów na przykładzie)
dr Przemysław Juszczuk
Języki programowania deklaratywnego
paradygmat deklaratywny a imperatywny
padarygmat imperatywy - ciąg poleceń, czyli sekwencja instrukcji
zmieniających pewien stan maszyny aż do osiągnięcia końcowego
wyniku. Stan rozumiany jako zawartość pamięci i rejestrów
modyfikowana w kolejnych krokach (instrukcje przypisania, operacje
matematyczne, pętle a także możliwość przekazania sterowania do
innego miejsca - instrukcja goto). Poszczególne instrukcje (w kodzie
maszynowym) są poleceniami zmieniającymi stan maszyny.
Imperatywne podejście to np. obiektowe, czy równoległe. Języki:
Pascal, C, C++, Java, C ].
paradygmat deklaratywny - szczegółowy opis określonych warunków
końcowych, które powinny być spełnione, żeby możliwe było
uzyskanie rozwiązania. Mówimy raczej ćo chcemy otrzymać”, a nie
”jakie kroki należy wykonać”, zatem nie ma sekwencji instrukcji
modyfikujących stan maszyny krok po kroku. Zatem podejście to
polega na opisywaniu tego co nas interesuje a nie jak to zrobić.
Istotny jest też determinizm - tzn. dla takiego samego zestawu
danych i reguł wynik pozostaje niezmienny. Deklaratywne to
programowanie funkcyjne i programowanie w logice. Języki: Lisp,
Prolog, Haskell, F ] i SQL.
dr Przemysław Juszczuk w logice
Języki programowania deklaratywnego
cechy paradygmatu programowania
zastosowania języka Prolog
systemy ekspertowe;
automatyczne dowodzenie twierdzeń;
symboliczne rozwiązywanie równań;
przetwarzanie danych;
przetwarzanie języka naturalnego.
obiekt w Prologu a obiekt w języku imperatywnym
obiekt w języku imperatywnym jest podobny do obiektu w świecie
rzeczywistym - posiada pewne cechy oraz zachowanie (pola i
metody). Stany przechowywane w zmiennych a zachowaniem sterują
metody;
obiekt w Prologu - definiujemy jaki jest (a nie z czego się składa i co
można z nim zrobić). Opisujemy relacje, jakim podlega ten obiekt.
Zatem przy pomocy programu mamy możliwość stawiania pytań.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
termy w Prologu
stała;
zmienna (symboliczne przedstawienie nazw obiektów, które są w
danej chwili dane);
struktura (term złożony). Termy złożone budowane są przy pomocy
innych termów oraz funktorów (symboli funkcyjnych), np.
f (T1 , T2 , ..., T3 );
Term złożony, to obiekt złożony z innych obiektów, czyli atomów,
liczb, zmiennych a także innych termów złożonych.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Klauzule i zapytania w Prologu
Program w Prologu składa sie z klauzul i zapytań;
Klauzule to fakty i reguły (kolejność klauzul pojawiających się w
pliku źródłowym jest bardzo ważna);
Zapytanie ma taką samą strukturę jak ciało reguły i tak jak ono
kończy się kropką;
Zapytania nie zawierające zmiennej to zapytania elementarne
wysoki(jan, michal);
Zapytania zawierające zmienną to zapytania nieelementarne
wysoki(X, michal).
Fakty: nazwa relacji znajdującej się przed nawiasem to predykat,
natomiast obiekty wewnątrz nawiasów to argumenty.
Reguły w Prologu i przykład reguły
W języku prolog reguła składa się z głowy i treści, połączonych ze sobą
znakami :- i zakończonych znakiem ”.”. Znak :- można traktować jako
łącznik jeżeli.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
unifikacja w Prologu
Unifikacja, czyli uzgadnianie - mechanizm pozwalający sprawdzić,
czy dwa termy są identyczne lub mogą stać się identyczne w wyniku
ukonkretnienia (czyli podstawienia odpowiednich wartości za
zmienne).
Kluczowe jest, aby podstawienie za zmienne było identyczne w
całym wyrażeniu.
zmienna anonimowa, może mieć inną wartość w różnych miejscach.
spełnienie celu w Prologu
Procesu mający na celu wykazanie, że istnieje ciąg podstawień i
przekształceń pozwalający przypisać zapytaniu wartość logiczną prawda.
Poszukiwanie takiego dowodu nazywane jest spełnianiem (obliczaniem)
celu. Jeśli cel pasuje do głowy reguły, wówczas mają miejsce odpowiednie
podstawienia wewnątrz reguły i tym samym otrzymujemy nowy cel,
zastępujący niejako cel początkowy. Jeśli cel ten składa się z kilku
predykatów, wówczas zostaje on podzielony na kilka podceli, przy czym
każdy z nich traktujemy jak cel pierwotny.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
mechanizm rezolucji
Definicja: Proces zastępowania wyrażenia przez inne wyrażenie.
Algorytm:
1
Dopóki zapytanie nie jest puste
Wybierz term z zapytania
Znajdź fakt lub regułę uzgadniającą się z termem. Jeśli nie ma to
zwróć fail w przeciwnym razie kontynuuj:Jeśli znaleziono fakt, usuń
go z zapytania ; Jeśli znaleziono regułę, zastąp term ciałem reguły.
2
Zwróć success.
odcięcie i do czego można wykorzystać
Mechanizm odcięcia pozwala zaniechać nawracania przez Prolog do
wcześniej dokonanych wyborów.
Służy do sterowania nawracaniem i oznaczany jest jako wykrzyknik.
Nie nawracamy do wcześniej dokonanych wyborów.
Odcięcie jest zawsze spełnione.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
rekurencja w Prologu i przykład
wywołanie wewnątrz funkcji samej siebie;
każda definicja rekurencyjna musi posiadać przypadek bazowy, który
pozwala nie odwoływać się funkcji do samej siebie (w przeciwnym
wypadku nigdy się nie zakończy);
przykłady to silnia, największy wspólny dzielnik,;
w przypadku definicji używamy mechanizmu odcięcia (przykłady z
ćwiczeń).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
listy w Prologu
Lista jest uporządkowanym ciągiem elementów o dowolnej długości. Jako
element listy może być użyty każdy prawidłowy term Prologu, tzn. atom,
liczba, zmienna, term złożony w tym także inna lista.
umieszczane w nawiasach kwadratowych;
lista pusta;
listy wewnątrz listy;
Lista jest albo strukturą pustą albo strukturą z dwiema składowymi:
głową i ogonem;
specjalny operator rozdzielający listę na głowę i ogon (kreska
pionowa).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
rekurencja na listach w Prologu i przykład
przegląd listy (poszczególnych jej elementów) w taki sposób, aby w
danym momencie analizować jeden element - rozdzielamy głowę i
ogon;
dodatkowe rozwiązanie bazowe nie zawierające wywołania
rekurencyjnego;
pisz([]). pisz([X |Y ]) : −print(X ), nl, pisz(Y ).
predykaty wbudowane i przykład
member (lista);
reverse (lista);
write;
nl;
read (jednoargumentowy predykat przypisujący argumentowi term
wpisany z klawiatury);
listing.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
cechy paradygmatu funkcyjnego oraz koncepcje języków funkcyjnych
obliczenia są traktowane jako realizacja/ewaluacja funkcji
(matematycznych) zamiast jawnej zmiany stanu i przekształcenia
danych;
funkcje czyste, leniwe wartościowanie, rekurencja, funkcje wyższego
rzędu.
funkcje czyste
funkcja jest czysta, jeżeli nie posiada efektów ubocznych, czyli zmian
stanu spowodowanych przez funkcję lub wyrażenie;
modyfikacją stanu jest np. zmiana wartości zmiennej (dostęp do
pamięci), czy zapis do pliku.
w przypadku języka czysto funkcyjnego nie ma możliwości
definiowania funkcji nieczystych (brak zmiennych).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
obszary zastosowań dla języków funkcyjnych
matematyka finansowa;
wyrażenia regularne i wyszukiwanie wzorców;
budowanie struktur grafowych i działanie na takich strukturach;
przetwarzanie danych.
paradygmaty w języku F ]
zalety paradygmatu funkcyjnego oraz paradygmatu obiektowego
(podejście imperatywne);
podejście funkcyjne - istotne jest, co ma być zrobione, a nie sposób,
w jaki ma to być zrobione;
programowanie obiektowe - dostęp do klas, instrukcji.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
listy w F ]
lista jest podstawowym typem w języku - odpowiada tablicy w
językach imperatywnych;
w przeciwieństwie do np. PHP wszystkie jej elementy muszą mieć
ten sam typ;
lista pusta oznaczana jako [], połączenie dwóch elementów w listę ::
wyrażenia lambda w C ]
wyrażenie lambda to funkcja anonimowa (tworzenie delegatów);
delegaty, czyli wskaźniki na funkcję (tworzymy delegat, który ma
jeden parametr np. String i zwraca int; następnie tworzymy funkcję,
która również otrzymuje String i zwraca int, a następnie do delegata
przypisujemy tę funkcję);
umożliwia tworzenie funkcji lokalnych przekazywanych jako
argumenty funkcji lub zwracanych jako wartość funkcji.
metoda Count z biblioteki Linq, która zlicza elementy spełniające
podane wyrażenie lambda. Np. int ile =
liczby .Count(n => n%2 == 1).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Zapis wiedzy w systemie PC Shell
Deklaratywna reprezentacja wiedzy w formie reguł i faktów ( w
przeciwieństwie do predykatów w Prologu). Reprezentacja wiedzy w
formie zwartych bloków oraz pełne rozdzielenie wiedzy eksperta od
procedur sterowania. Wiedza ekspercka może być zawarta w kilku
źródłach jednocześnie (bazy wiedzy, sieci neuronowe).
sources - źródła danych dla bazy (bazy danych, bazy wiedzy,
aplikacje bazujące na sieciach neuronowych);
facets - zbiór deklaracji dotyczących wybranych atrybutów
(wszystkie atrybuty używane w bazie);
facts - informacje dodatkowe (stałe, lub będące parametrami dla
bazy wiedzy - blok nie jest wymagany);
rules - każda reguła w tym bloku składa się części warunkowej oraz
konkluzji;
control - blok sterujący programu (deklaracje zmiennych oraz
instrukcje do wykonania).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Składnia reguł w systemie PC-Shell
całość wiedzy jest kodowana za pomocą reguł i faktów.
podstawową strukturą reprezentacji wiedzy jest tu trójka:
obiekt-atrybut-wartość.
przykład reguły (przesłanki, czyli elementy, które muszą być
spełnone, żeby konkluzja reguły dopisana została bo bazy faktów);
reguła może zostać uruchomiona tylko, jeżeli wszystkie jej przesłanki
są faktami;
wnioskowanie w przód oraz wnioskowaniw w tył - jaka jest różnica,
znać prosty przykład;
wewnątrz reguł nie powinno być alternatywy, czyli sytuacji gdzie
mamy x = war1 LUB x = war2, ale taki zapis jest też dopuszczalny
(chociaż lepiej rozbijać na dwie reguły);
dr Przemysław Juszczuk
Języki programowania deklaratywnego

Podobne dokumenty