JĘZYKI PRZETWARZANIA SYMBOLICZNEGO sprawdzian 1
Transkrypt
JĘZYKI PRZETWARZANIA SYMBOLICZNEGO sprawdzian 1
JĘZYKI PRZETWARZANIA SYMBOLICZNEGO sprawdzian 1 - język PROLOG 18.05.2009 ZADANIE 1 (15 punktów) Poniżej przedstawiono kod procedury merge, która dla celu postaci ?_merge (<listal>, <lista2>, Wynik). gdzie listal, lista2 są listami posortowanymi (kolejność wg rosnących wartości) scala dwie listy w jedną listę posortowaną. a) /*C1*/ merge ([ ], [Y|Rest], [Y|Rest]). /*C2*/ merge ([X|Rest], [ ], [X|Rest]) . /*C3*/ merge ([X|Rest1], [Y|Rest2], [X|Rest3]) :X<Y, merge(Restl, [Y|Rest2], Rest3). /*C4*/ merge ([X|Restl], [Y|Rest2], [Y|Rest3]) :X >= Y, merge ([X|Restl], Rest2, Rest3). Przedstawić drzewo celów dla celu początkowego ?_merge([2, 5, 7, 12], [4, 9],L). Dla każdego węzła należy podać aktualną listę celów, dla każdego przejścia między węzłami należy wskazać użytą klauzulę oraz związania zmiennych w tym kroku wnioskowania. Pokazać wyraźnie sekwencje związań zmiennych prowadzącą do uzyskania wyniku. b) Zapisać w pseudokodzie interpretacje proceduralną procedury merge dla celu podanej postaci. Zapis procedury powinien zawierać WSZYSTKIE i TYLKO TE operacje, które są wykonywane przez interpreter PROLOGu w ramach interpretacji procedury. Operacje uzgodnienia należy przetłumaczyć na zapis szczegółowych operacji na danych właściwych typowym językom proceduralnym, takie jak: porównanie danych, dekompozycja list, konstruowanie list, przypisanie wartości zmiennej. Wybór klauzuli należy przetłumaczyć na właściwe typowym językom proceduralnym konstrukcje warunkowe. ZADANIE 2 (15 punktów) Przedstawić drzewo celów dla podanej niżej procedury sublist i celu ?_sublist( Wynik, [a, b] ). sublist (S, L) :conc (LA, LB, L), conc (S, LC, LB). Drzewo celów skonstruować i przedstawić jako złożenie drzew celów dla sekwencji dwóch wywołań procedury conc. Drzewo celów wystarczy opisać tylko na tyle szczegółowo, na ile jest to niezbędne, aby wyraźnie pokazać, jak powstają kolejne wyniki (wartości zmiennej Wynik) i W JAKIEJ KOLEJNOŚCI. Kod procedury conc: conc ( [ ], L2, L2 ) . conc ( [X|R], L2, [X|NR] ) :conc ( R, L2, NR ) .