Katedra Inżynierii Wiedzy laborki 14
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)
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
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)
cechy paradygmatu programowania w logice 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.
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ń.
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 (T 1, T 2,..., T 3 ); 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.
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.
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.
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.
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ń).
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).
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.
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).
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.
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).
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).
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);