141327.ocena(3.0) ; jest rotacja ale bez max; przekombinowany środek; błędne dzielenie; reszty brak 141323.ocena(2.0) ; mnóstwo elementarnych błędów 140759.ocena(2.0) ; poprawnie transformacja do cyfr i na odwrót oraz max czy środek, ale reszty brak; nie ma nic nowego co nawiązywałoby do tego zadania; za mało 141105.ocena(2.0) ; bardzo dużo błędów; tylko max i wyliczanie różnic jest poprawnie, a reszta już nie; jak można zrobić błąd w odwracaniu listy? 140801.ocena(2.0) ; poprawnie transformacja do cyfr i na odwrót; max budzi wątpliwości; środek przekombinowany i źle użyty; reszta błędnie albo brak; za mało 140797.ocena(3.0) ; brak rotacji z max i środkiem oraz podziału na fragmenty; reszta poprawnie 141315.ocena(2.0) ; mnóstwo elementarnych błędów 141336.ocena(3.5) ; brak rekonwersji na liczby; nie ma dzielenia na fragmenty; nie ma też predykatu głównego z wyliczaniem różnic; reszta ok 141306.ocena(2.0) ; poprawnie transformacja na cyfry; w drugą stronę już nie; dużo braków; niektóre definicje zupełnie zbędne albo pozornie potrzebne 141337.ocena(3.0) ; rotacja nie w pełni poprawna; dzielenie na listę fragmentów też połowicznie; nie ma różnic i predykatu głównego; brak scalania cyfr 141281.ocena(3.0) ; rotacja niedopracowana (dwie próby i ten sam prosty błąd); środek, max, konwersja do cyfr dobrze; reszty brak 141322.ocena(3.5) ; strasznie przekombinowana rotacja (działa :-); problemy w max; niedopracowana rekonwersja do liczby; brak predykatu głównego z różnicami 141312.ocena(4.5) ; błąd w transformacji wszystkich liczb na ciąg cyfr; mały problem w predykacie głównym 140807.ocena(2.0) ; tylko transformacja do cyfr poprawnie; reszta błędnie albo brak; zdecydowanie za mało na zaliczenie 141304.ocena(5.0) ; bardzo dobrze Drodzy Państwo, Uzyskane przez Państwa rezultaty, a dokładnie poziom prac, sprawił, iż nie mogę przemilczeć ewidentnego dla mnie faktu, że nie przygotowaliście się na tę poprawkę. Niemal połowa osób z grupy miała problemy z predykatem wyznaczania środka nieparzystej listy. Wykonywanie jakiś kombinacji z indeksami i wyliczaniem środkowej pozycji są zupełnie nie na miejscu, skoro wolno Wam korzystać z predykaty append, bo może to być dokładnie taka definicja jak na zajęciach: środek([X],X). środek(L,S) :- append([_|T],[_],L), środek(T,S). i to wszystko! Maksymalnie 5 minut na przypomnienie sobie i napisanie tego. Druga rzecz problematyczna to rotacja z max w środku. Tutaj również niepotrzebnie kombinujecie Państwo z jakimś indeksami i pozycjami zamiast skorzystać ze znanego Wam (z sortowania bąbelkowego) "schematu" rekurencji . Oto właściwa definicja rotacji: rotujmax(L,L) :- max(L,M), środek(L,M),!. rotujmax([H|T],W) :- append(T,[H],L), rotujmax(L,W). a to nasza definicja sortowania bąbelkowego: bąbel(L,L) :- zamiana(L,M), L=M,!. bąbel(L,W) :- zamiana(L,S), bąbel(S,W). Analogia może nie jest od razu widoczna, gdyż predykat zamiana (nie podaję jego treści bo była na zajęciach, a nie jest głównym tematem tych rozważań) pełni dwie role: a. sprawdza czy lista jest już posortowana i wtedy jej nie zmienia tj. mamy L=M b. wykrywa niewłaściwy porządek na liście i zamienia miejscami parę liczb Aby ułatwić dostrzeżenie analogii, można (nieco na wyrost) rozdzielić te role i pierwszą zrealizować predykatem sprawdzania, że lista jest rosnąca: rosnąca([_]). % kwestię listy pustej zostawiamy otwartą (czy jest rosnąca, czy nie?) rosnąca([X,Y|T]) :- X=Y, % które są w złym porządku !, % blokujemy szuanie innych takich par (bo może być ich więcej) append(P,[Y,X|Q],W). % wstawiamy na powrót do listy zamieniając miejscami Widać tutaj ogrom możliwości jakie stwarza elastyczne wykorzystywanie predykatu append. Ten ostatni przykład jest, rzecz jasna, dużo bardziej zaawansowany. Zadanie z rotacją nie wymagało jednak od Państwa, aż tak dogłębnej wiedzy i zrozumienia tych zagadnień, bo ograniczało się do zwykłego przeniesienia głowy listy na jej koniec, co jest operacją Wam nieobcą, znaną choćby z predykatu odwracania listy. Resztę załatwiał omówiony już "schemat" rekurencji. Mam nadzieję, że ten komentarz uzmysłowi Państwu przede wszystkim charakter i poziom złożoności zadania, które wcale nie było tak karkołomnym, jak wskazywałyby osiągnięte przez Państwa rezultaty. Pozdrawiam, Artur Michalski