1. Podstawowe cechy paradygmatu programowania w logice: deklaratywny styl programowania, mechanizm wnioskowania, formuły Hornowskie,
środki kontroli nad wnioskowaniem/obliczeniem. Mechanizm rezolucji dla klasycznego rachunku zdań.
2. Składnia logiki pierwszego rzędu. Uniwersum Herbranda. Formuły Hornowskie. Definicja spełniania dla formuł Hornowskich.
Unifikacja i rezolucja w logice pierwszego rzędu. Twierdzenie o istnieniu najbardziej ogólnego unifikatora (MGU).
3. SLD rezolucja w logice pierwszego rzędu. Twierdzenie o pełności dla rezolucji i SLD rezolucji. Twierdzenie o nierozstrzygalności SLD rezolucji.
Reprezentowanie wiedzy w Prologu.
Podstawy pracy z interpreterem Prologu (Swi-Prolog).
4. Znaczenie symboli '=' i '==' w Prologu. Kontrola nad przebiegiem wykonania programu: kolejność wyboru
klauzul do unifikacji, nawracanie, odcięcie (cut), wymuszenie nawrotu (fail).Sledzenie wykonania programu. Meta predykaty: clause/2, assert/1, retract/1.
5. Obsługa plików, programowanie wejścia i wyjścia.
Arytmetyka w Prologu. Znaczenie 'is' oraz '=:='."
6. Negacja w Prologu. Założenie o domkniętości świata (closed world assumption).
SLDNF rezolucja. Modele stabilne.
7. Reprezentowanie struktur rekurencyjnych: lista, drzewo. Technika programowania z akumulatorem. Listy różnicowe.
8. Wprowadzenie do rachunku lambda. Interpretacje wartości logicznych, instrukcji warunkowej, iloczynu kartezjańskiego w rachunku lambda. Redukcje termów. Operator punktu stałego Y.
9. Arytmetyka w rachunku lambda. Własności programowania funkcyjnego: przejrzystość referencyjna, niezmienność danych, bezstanowość, brak efektów ubocznych, funkcje jako podstawowe obiekty, rekursja, leniwa ewaluacja, typy, polimorfizm, funkcje wyższych rzędów.
10. Wprowadzenie do języka Haskell. Podstawy składni, konwencje nazewnicze i pierwsze programy.
Podstawowe typy: logiczny, znakowy, typy liczbowe. Listy, pary, typy funkcji. Operacje curry i uncurry. Polimorfizm. Klasy typów. Definiowanie typów.
11. Definiowanie funkcji: wyrażenia lambda, złożenie funkcji, rekursja, dopasowywanie wzorca.
Definiowanie funkcji przez równoległą rekursję. Podstawowe operacje na listach.
12. Typy rekurencyjne. Definiowanie funkcji działających na typach rekurencyjnych. Implementacja drzewa.
13. Kontynuacje i monady.
14. Problem obsługi wejścia i wyjścia w językach funkcyjnych, efekty uboczne, niepowtarzalność wyniku. Typ IO. Obsługa plików.
15. Struktury nieskonczone w Haskellu.
|