Paradygmaty programowania/Ćwiczenia 7: Programowanie w logice - przegląd

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zadanie 1

Napisać funktor służący do obliczania długości listy.

Wskazówka:

Nota bene: Czy takiego funktora można użyć do wygenerowania listy o podanej długości, np. pytając len(X, 3)? Sprawdź. Co by się stało, gdybyśmy zamienili kolejność termów w poprzedniku? Sprawdź...

Zadanie 2

Napisać funktor służący do sumowania elementów listy (przy założeniu, że lista składa się z samych liczb).

Wskazówka:

Zadanie 3

Oszacować złożoność przykładów podanych na końcu wykładu (append, reverse, member) w funkcji długości przetwarzanych list. Czy zależy to od sposobu użycia tych funktorów (policzenie wyniku lub tylko sprawdzenie)?

Zadanie 4

Podany w przykładzie funktor member sprawdza przynależność elementu do listy nie zakładając nic o uporządkowaniu listy. Gdyby założyć, że lista zawiera np. liczby uporządkowane rosnąco, można by przerwać szukanie, gdy tylko dojdziemy do liczby większej niż szukana. Napisz taką wersję funktora. Można korzystać z infiksowych operatorów porównywania liczb.

Zadanie 5*

Napisać w Prologu program sortujący listę.

Wskazówka:

Zadanie 6

Napisać program prologowy opisujący relacje rodzinne, wraz z przykładową bazą faktów. Program powinien pozwalać na wyliczanie, kto jest czyim ojcem, matką, synem, córką, dziadkiem, wujem, ciotką itp. Przykładowe fakty mogą wyglądać tak:

     kobieta(anna).
     kobieta(ewa).
     mężczyzna(jan).
     mężczyzna(jerzy).
     matka(anna, jerzy).
     ojciec(jan, jerzy).

Zauważmy, że stwierdzenia typu kobieta(anna) i mężczyzna(jerzy) są potrzebne nie tylko do rozstrzygnięcia pewnych relacji (np. syn/córka, brat/siostra), ale również do generowania rozwiązań, gdy pytanie zawiera zmienne.