Programowanie w logice i funkcyjne WM-I-U-PWL
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.
Problem obsługi wejścia i wyjścia w językach funkcyjnych, efekty uboczne, niepowtarzalność wyniku.
Typ IO. Obsługa plików.
14. Struktury nieskonczone w Haskellu.
15. Elementy programowania funkcyjnego w imperatywnych językach programowania.
Połączenie paradygmatów: funkcyjne programowanie w logice. Język Curry.
E-Learning
Grupa przedmiotów ogólnouczenianych
Poziom przedmiotu
Symbol/Symbole kierunkowe efektów uczenia się
Typ przedmiotu
Koordynatorzy przedmiotu
Efekty kształcenia
Zna teoretyczne podstawy stojące za deklaratywnym i funkcyjnym paradygmatem programowania (rezolucja, uniwersum Herbranda, rachunek lambda). (I2_W01)
Zna własności deklaratywnych i funkcyjnych języków programowania. (I2_W04)
Zna metody analizy poprawności programów deklaratywnych wykorzystujące SLD rezolucję i funkcyjnych przez analizę termów i ich redukcję. (I2_W05)
Jest świadomy potrzeby aktualizacji wiedzy dotyczącej standardów języków programowania oraz ich implementacji. (I2_K01)
Kryteria oceniania
egzamin pisemny
Literatura
Clocksin, Mellish, Prolog. Programowanie. Helion
Nilsson, Małuszyński, Programming in Prolog, Wiley & Sons Ltd, wolny dostęp: http://www.ida.liu.se/~ulfni53/lpp/
Harold Abelson, Gerald Jay Sussman, Julie Sussman, Struktura i interpretacja programów komputerowych, WNT.
Paul Hudak, John Peterson, Joseph Fasel,
A Gentle Introduction to Haskell, Version 98, 2000,
wolny dostęp: https://www.haskell.org/tutorial/
Richard Bird, Introduction to Functional Programming using Haskell.
Simon Peyton Jones (ed.), Haskell 98. Language and Libraries. The Revised Report. 2002, wolny dostęp: https://www.haskell.org/definition/haskell98-report.pdf
Więcej informacji
Dodatkowe informacje (np. o kalendarzu rejestracji, prowadzących zajęcia, lokalizacji i terminach zajęć) mogą być dostępne w serwisie USOSweb: