Metody Programowania - Lista 4


Zadanie 1

Napisać funkcję w Pop11 która mając zadaną listę liczb całkowitch: Uwaga: Listy odwraca wbudowana funkcja 'rev' (robiąc kopię) i 'ncrev' (modyfikując listę).

Zadanie 2

Napisać funkcję w Pop11 która mając zadane dwie listy liczb całkowitch równej długości:

Uwaga1: instrucja for postaci 'for el1, el2 in list1, list2 do ...' pozwala na równoczesną iterację po dwu listach.

Uwaga2: proste rozwiązanie buduje listę wynikową w odwrotnej kolejności i używa 'ncrev'.

Zadanie 3

Napisać funkcję w Pop11 która mając dane dwie uporządkowane niemalejąco listy liczb całkowitch połączy je w nową listę na której są wszystkie liczby (z uwzględnieniem krotności) z list źródłowych w porządku niemalejącym. Jeśli dana liczba występuje n razy na pierwszej liście i k razy na drugiej to ma wystąpić n+k razy na liście wynikowej.

Zadanie 4

Napisać funkcję w Pop11 która mając daną listę liczb, słów i przecinków podzieli ją na odcinki oddzielone przecinkami. Każdy odcinek to lista, wynik to lista list. Np:
[, 1 , 2 3 ala , 4]
ma dać
[[] [1] [2 3 ala] [4]]
Uwaga: Technicznie przecinek to też słowo, trzeba testować czy element listy jest równy ",".

Zadanie 5

Napisać funkcję która mając dane listę (a właściwie drzewo) reprezentujące wyrażenie logiczne i listę wartości zmiennych obliczy wartość tego wyrażenia dla tych zmiennych. Np.
wartość_l([and x1 [or x2 x3]], [[x1 true] [x2 false] [x3 true]])
Tzn. wyrażenie jest listą która ma dwa argumenty, będące zmiennymi lub wyrażeniami. "and" oznacza iloczyn logiczny, "or" sumę logiczną, "not" negację (dla uproszczenia można pominąć inne operatory).

Zadanie 6

Napisać funkcję w Pop11 która mając dane drzewo wyrażenia arytmetycznego takie jak akceptuje program przykładowy obliczy:

Zadanie 7

Napisać funkcję która mając dane drzewo wyrażenia arytmetycznego takiego jak w wyżej, wyprodukuje listę argumentów i wartości w postaci odwrotnej polskiej (tzn. tak że najpierw mamy listę odpowiadającą pierwszemu argumentowi, potem drugiemu a na końcu operator).

Uwaga: jak zwykle, wygodnie budować listę w odwrotnej kolejności a potem odwracać.

Zadanie 8

Napisać funkcję która mając dane drzewo, reprezentowane jako lista której elemntani są atomy (liczby i słowa) oraz podrzewa (czyli listy) "spłaszczy" je, tzn wypodukuje listę wszystkich atomów, zachowując ich kolejność przy wypisywaniu. np:
[[[ala 1] [] 2 [3 4]] [ma 5 6] [[kota 7] 8]]
ma dać
[ala 1 2 3 4 ma 5 6 kota 7 8]