zapisany. Wskazówka: funkcja intlnstr będzie posiadała 4 argumenty. Jednym z nich będzie flaga (typu bool) informująca o tym, że rejestr był już zapisywany.
29. Zmodyfikuj funkcję sprawdzającą poprawny tak, aby precyzyjnie informowała (przynajmniej dla jednego wariantu), która instrukcja jest błędna i z jakich powodów. Zastosuj funkcj e pomocnicze:
fun wypisz_stos ([]:stack) = "nil"A"\n"
| wypisz_stos (xl::xs) = (Real.tostring xl)A" "Awypisz_stos(xs);
fun wypisz_instr ( PUSH x) = "PUSH "A(Real.tostring x)
| wypisz_instr ( AA ) = " aa "
j wypisz_instr ( ADD ) = " ADD "
j wypisz_instr ( SUB ) = " SUB "
| wypisz_instr ( MUL ) = " MUL
30. Zdefiniuj wielowariantową funkcję intlnstr (drugim argumentem jest dowolna lista il)
za pomocą konstrukcji case. Do wyodrębniania elementów listy użyj instrukcji postaci let val (xl::x2::xs) = il in...end; Uwzględnij generowanie wyjątków przy
nieprawidłowych wywołaniach funkcji.
31. Zdefiniuj wielowariantową funkcję wypisz_instr za pomocą konstrukcji case.
Zmodyfikuj intpProg tak, aby zliczała wykonane instrukcje. Teraz funkcja powinna zwracać parę.
32. Zadeklaruj funkcję usunNieparzyste, taką że:
usunNieparzyste^, x2/ x3, x4/ ... ] = [x2, x„, ... ]
33. Podaj deklarację funkcji typu int list -> int option odszukującej najmniejszy element z listy liczb całkowitych.
34. Podaj deklarację funkcji typu int list -> int option odszukującej największy element z listy liczb całkowitych.
35. Zadeklaruj funkcję połącz łączącą elementy listy w pary, tzn. połącz [x1,x2/x3/x4/...]= [(xlłx2), (x3,x4),...].
36. Zaproponuj deklarację funkcji length wyznaczającej długość listy.
37. Zadeklaruj funkcję krotnosc(x, ys), która podaje ile razy element x występuje na liście ys.
38. Napisz funkcję sprawdzającą, czy na podanej liście występują powtórzenia elementów. Działanie zaprezentuj na przykładzie.
39. Zrealizuj funkcję biblioteczną map typu: ('a -> 'b)->'a list -> 'b list wywołującą