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 ) .